构造函数与析构函数

来源:互联网 发布:c语言二分搜索代码实现 编辑:程序博客网 时间:2024/05/01 06:37

构造函数:主要作用就是为对象初始化。有一点要说的是,在继承体系汇总,如果在构造函数中,如果没有指定基类的构造函数,那么编译器会在构造函数开头加入,基类的默认构造函数,这样就可以初始化基类对象部分;

析构函数:对于析构函数,要说的多点,实际也不太复杂,就是加入了virtual;使其具有了多态性质;

#include <IOSTREAM>using namespace std;class A{public:~A(){cout<<"sss"<<endl;};protected:private:};class B:public A{public:B(){}~B(){cout<<"aaa"<<endl;}};void main(){B *b=new B;delete b;}


在这个示例中输出:aaa  \n   sss;也就是先调用子类,再调用基类,也就是在子类的析构函数中,在析构函数结尾,加入了基类的析构函数;

class A{public:~A(){cout<<"sss"<<endl;};protected:private:};class B:public A{public:B(){}
        ~B(){
cout<<"aaa"<<endl;}};void main(){A *a=new B;delete a;}

这个中输出:sss,也就是只调用了基类的析构函数,因为基类指针只会调用基类代码空间的代码(如果没有虚函数);

class A{public:virtual ~A(){cout<<"sss"<<endl;};protected:private:};class B:public A{public:B(){}
virtual ~B(){
cout<<"aaa"<<endl;}};void main(){A *a=new B;delete a;}

这个输入:aaa \n sss;由于虚函数,所有就调用子类的析构函数,就得到与例1的结构;



这里面主要有一点:编译器为我们做了很多事情,为我们加入很多代码;就像全局变量,就是编译器在main函数开始为我们加入初始化,在main结尾,加入析构函数;(参考:深度探索C++模型)

原创粉丝点击