04 String(const char *str = NULL); //普通构造函数
05 String(const String &other); //拷贝构造函数
06 ~String(void); //析构函数
07 String & operate =(const String &other); //赋值函数
08 private:
09 char *m_data; //用于保存字符串
10 };
答案:
1、String 的析构函数:
1 String::~String(void)
2 {
3 delete [] m_data;
4 }
2、String 的构造函数:
01 String::String(const char *str)
02 {
03 if(NULL==str)
04 {
05 m_data = new char[1];
06 *m_data = '\0';
07 }
08 else
09 {
10 int length = strlen(str);
11 m_data = new char[length+1];
12 strcpy(m_data,str);
13 }
14 }
3、String的拷贝构造函数:
1 String::String(const String &other)
2 {
3 int length = strlen(other.m_data);
4 m_data = new char[length+1];
5 strcpy(m_data,other.m_data);
6 }
4、String的赋值函数:
01 String & String::operate =(const String &other)
02 {
03 if(this== &other) //检查自复制
04 {
05 return *this;
06 }
07 delete [] m_data; //释放原有的内存资源
08 int length=strlen(other.m_data); //分配新内存资源,并复制内容
09 m_data = new char[length+1];
10 strcpy(m_data,other.m_data);
11 return *this; //返回本对象的引用
12 }
9、重载与覆盖有什么不同?
答案:
虚函数总是在派生类中被改写,这种改写被称为“override”(覆盖)。
override 是指派生类重写基类的虚函数,重写的函数必须有一致的参数表和返回值。Override这个单词好像一直没什么合适的中文词汇来对应。有些人译为“覆盖”,还贴切一些。
overload约定成俗地被翻译为“重载”,是指编写一个与自己已有函数同名但是参数表不同的函数。例如一个函数既可以接受整型数作为参数,也可以接收浮点数作为参数。重载不是一种面向对象的编程,而是一种语法规则,重载与多态没什么直接关系。
作者:IT笨笨