收录日期:2019/04/20 16:48:40 时间: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.

外键约束关系,大虾帮帮俺! 打包后,运行程序,找不到数据库 地址如何转换成百度地图的点坐标? 上传服务器问题求大侠解决下小弟拜谢了 在外靠朋友,这是错误的。 jquery ajaxFileUpload.js,有问题了,传文件收不到,请帮助 win7 64位 连Oracle连不上 鼠标移到友情链接上文字显示白色,hover不起作用 response.redirect之前要不要关闭conn? 各位大侠,速进,急急急! EXTJS如何在后台获取! 小生拜谢 求指教!!!!!! VB.net生成的Dll和VB生成的Dll有何不同? 用VC做开发的,如何实现界面美化的??? 求解lea指令 C# 16进制转ACSII字符 RowExpander + viewConfig 同时使用的时候会出现错误呢? 一个SQL中的路线中转问题(包括一次中转和二次中转甚至多次中转) 修改一个SQL语句,count()的使用方法 fff 求教问题,如何避免System.ArgumentOutOfRangeException: StartIndex 不能小于 0 请教大家一个问题。。 安装与部署中的.net版本 .net SQL Server 查找问题 回车键提交表单不兼容火狐 求助 一个查询语句或函数 关于Web Service身份验证问题 win7 64位+VS2010 连不上Oracle数据库 error LNK2001: 无法解析的外部符号 _CLSID_DMOWrapperFilter 要疯了,自定义控件问题