C++关键技术总结
{
cout << "destructing " << sname << endl;
delete[] sname;
sname = NULL;
}
protected:
char *sname;
};
int main()
{
student p1("wang");
student p2(p1);
return 0;
}
在VC下编译能通过,但是在运行时出错了。但是在linux环境下,g++编译和运行都正确。我估计在VC下都当成浅拷贝了。
6、 析构函数
一个类只能有一个析构函数,没有参数,没有返回值,用户可以自己定义析构函数,也可以使用编译系统生成的默认析构函数。
析构调用过程是构造顺序的逆过程。最先构造的对象,最后析构。
由于析构函数不能带参数,故一个类中只能有一个析构函数。一般来说,如果一个类中定义了虚函数,析构函数也应定义为虚析构函数,其主要用来完成对象消亡之前做一些清理工作,比如释放内存等。
一般情况下类的析构函数作用是:释放内存资源,而此析构函数不能被调用的话会造成内存泄漏。此时将析构函数定义为虚函数就特别重要。
7、 成员初始化列表及初始化
在进行含有对象成员的类对象的初始化时间,首先按照类定义对象成员的顺序来分别调用各自的对象成员所对用的构造函数,然后再执行该类自己定义的构造函数。
8、 继承
子类继承父类之后,如果修改了父类的方法,在调用父类的方法的时候,要使用(子类的对象).父类名::(方法名)来调用。
#include <iostream>
using namespace std;
class Base
{
public:
void fun()
{
cout << "In Base" << endl;
}
};
class Pai: public Base