[C++面试题]之面向对象 (二)

2014-11-24 12:38:53 · 作者: · 浏览: 1
lic:

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笨笨