收录日期:2019/06/26 10:36:22 时间:2016/05/31 10:45:52 标签:C++ 语言
#include <iostream.h>
#include <cstring>

class String
{
private:
char  * str;
int len;
static int num_strings;
enum {CINLIM = 80};
public:
String(const char * s);
String();
String(const String & st);
~String();
int length() const {return len;}
String & operator = (const String &);
String & operator = (const char *);
char & operator[](int i);
const char & operator[](int i)const;
friend bool operator <(const String & st1, const String & st2);
    friend bool operator >(const String & st1, const String & st2);
friend bool operator ==(const String & st1, const String & st2);
      friend ostream & operator<<(ostream & os, const StringBad & st);
 friend istream & operator>>(istream & is, String & st);
    static int HowMany();
};

int String::num_strings = 0;
int String::HowMany()
{
    return num_strings;
}

String::String(const char * s)
{
   len = int(strlen(s));
   str = new char[len + 1];
   strcpy(str, s);
   num_strings++;
}

String::String()
{
   len = 4;
   str = new char[1]; 
   str[0] = '\0';
   num_strings++;
}
String::String(const String & st)
{
  num_strings++;
  len = st.len;
  str = new char[len + 1];
  strcpy(str, st.str);
}

String::~String()
{
   --num_strings;
   delete [] str;
}

String & String::operator =(const String & st)
{
   if(this == &st)
   return *this;
   delete[] str;
   len = st.len;
   str = new char[len + 1]; 
   strcpy(str, st.str);
   return * this;
}

String & String::operator =(const char * s)
{
  delete []str;
  len = int(strlen(s));
  str = new char[len + 1];
  strcpy(str, s);
  return * this;
}

char & String::operator [](int i)
{
   return str[i];
}

const char & String::operator [](int i)const
{
   return str[i];
}

bool operator <(const String &st1, const String &st2)
{
return (strcmp(st1.str,st2.str) < 0);
}

bool operator >(const String & st1, const String & st2)
{
return st2.str < st1.str;
}

bool operator == (const String &st1, const String &st2)
{
return (strcmp(st1.str,st2.str) == 0);
}

ostream & operator << (ostream & os, const String & st)
{
os << st.str;
    return os;
}

istream & operator>>(istream & is, String & st)
{
char temp[String::CINLIM];
is.get(temp, String::CINLIM);
if(is)
st = temp;
while(is && is.get() != '\n')
continue;
return is;
}

void callme1(String & rsb)
{
cout << "String passed by reference:\n";
cout << "   \"" << rsb << "\"\n";

}


void callme2(String sb)
{
   cout << "String passed by reference:\n";
cout << "   \"" << sb << "\"\n";

}

/*main()
{
  String headline1("Celery Stalks at Midnight");
      String headline2("Lettuce Prey");
      String sports("Spinach Leaves Bow1 for Dollars");
  cout << "headline1: " << headline1 << endl;
      cout << "headline2: " << headline2 << endl;
  cout << "sports: " << sports << endl;
  callme1(headline1);
  cout << "headline1: " << headline1 << endl;
  callme2(headline2);
  cout << "headline2: " << headline2 << endl;
  cout << "Initialize one object to another:\n";

      String sailor = sports;
 
  cout << "sailor: " << sailor << endl;
  cout << "Assign one object to another:\n";
  String knot;
  knot = headline1;
  cout << "knot: " << knot << endl;
  cout << "End of main()\n";
  return 0;

}*/

帅哥 什么错误呀 哪里??

#include <iostream>
using namespace std;
friend ostream & operator<<(ostream & os, const StringBad & st);
=>
friend ostream & operator<<(ostream & os, const String & st);
接口改成这样也许好一点:
class String
{
private:
char *str;
int len;

static int num_strings;

enum {CINLIM = 80};
public:
String(const char * s);
String();
String(const String &st);
~String();

int length() const {return len;}

String& operator = (const String &);
String& operator = (const char *);
char& operator[] (int i);
constchar& operator[] (int i)const;

bool operator < (const String & st1, const String & st2);
    bool operator > (const String & st1, const String & st2);
bool operator ==(const String & st1, const String & st2);

friend ostream & operator<<(ostream & os, const String & st);
friend istream & operator>>(istream & is, const String & st);

    static int HowMany() const;
};
晕,类名写错了,再麻烦问下,为什么将#include <iostream.h>改成#include <iostream> using namespace std; 会出现成员数据不会是类中的错误提示?

     friend ostream & operator<<(ostream & os, const StringBad & st);

这里错了StringBad,

还有就是把<iostream.h>改成<iostream>

因为两个实际上是由区别的,具体的区别现在我说不准,你可以看看the c++
 program.

在用asp.net + vb.net写treeview时有没有点击treeview事件和方法? datawindow下的编辑问题 一个是模糊查询问题,一个是插入数据,一个是..... 这样的应用能不能用多线程? 请问在JAVA中有没有将HTML文件转换成XML文件的解决方案 用PC模拟路由器,如何纪录包文从哪一个接口传入的 唐僧情史 (转) 在用ATL创建的COM中怎样可以调用对话框吖? FastReport2.5的怪问题! 分不清 返回一个表的所以字段名称的sql语句怎么写? 我有一个textbox控件的问题想请教各位大虾! 我有很多表,现在要列出含有A字段和B字段的表名,应该怎么做呢? timer的问题,很简单,在线!!!!! 急!高分求书!! 各位大虾,看看这个问题! 求救!!!三网卡解决方案的问题!! 一个文件保密的问题 高手帮帮忙!!如何在ASP中实现报表打印 关于网络编程的一个问题 请问在有些网站,程序自动下载并安装,是怎么做的? 怎样保存一个打开的Excel文件 我MM的一篇文字,是給我的,但有些想不明白,大家幫忙看看! WebBrowser中打开word文档的问题:怎样关闭已打开的word文档 用DTS服务转换ACCESS时的缺省用户名 怎样把\"where or charindex(\'ddd\',spbm) or charindex(\'eee\',gnzz)\"最前面的or替换掉啊?javascript里没有replaceFirst函数?? 我想在福州找份工作 LinkError: WSASocketA,WSAIoctl等函数出错. 对类精通的同志请看看,怎么出现这个奇怪的问题 时布尔型显示True/False,如何转为\'√\'和\'\'