构造函数,析构函数,虚函数等易错混淆点

来源:互联网 发布:java转smail工具 编辑:程序博客网 时间:2024/06/05 11:39

1.构造函数是否可以是虚函数?析构函数呢?

答:构造函数不可以,虚函数是借助于虚函数表,而且是通过虚函数指针找到虚函数表,然而虚函数指针存在于对象之中,要有个对象才行,而调用构造函数的时候对象还没有建立,没有建立怎么会有虚函数指针呢?所以不可以。

    析构函数可以当一个父类的析构函数被声明为虚函数的时候,我们delete一个指向子类对象的父类指针的时候,实际调用的是子类的析构函数,但是子类析构函数会自动引发父类的析构函数的调用,从而使子类特有的部分和从父类继承的部分能够释放,我们一般把父类的析构函数声明成虚函数,尽管这个析构函数什么都不做。(最好是把基类的析构函数定义为虚函数,否则当用基类去创建一个指向派生类的指针,当其释放的时候基类中的东西可能不会被释放,造成内存泄漏)

2..虚函数是否可以是内联函数?

答:不可以,虚函数是通过虚函数表,这是在运行的时候确定的,然而内联函数的替换是在编译阶段,编译的时候不知道调用哪一个虚函数所以不可以。(编译时静态的,运行是动态的)

3.静态成员函数是否可以是虚函数?

答:不可以,静态成员函数不属于哪个类,而虚函数通过虚函数指针找到虚函数表,虚函数依赖于对象指针,而静态函数不属于某各类,所以不可以。

4.虚函数表和虚函数指针在运行,编译时建立?

答:虚函数表是在编译时建立,在编译的时候把类中的虚函数地址放到虚函数表中,构成一个指针数组。

虚函数指针是在运行时建立的,他也是类的隐藏的成员,他在调用构造函数的时候执行,构造函数执行完以后虚函数指针初始化好(构造函数在运行时调用的)

5.什么是虚函数?纯虚函数?什么是抽象类?纯抽象类?

答:虚函数:被virtual修饰的成员函数。(构造函数,静态成员函数和全局函数不能被声明为虚函数)

纯虚函数:virtual  函数返回值 函数名()= 0

抽象类:有纯虚函数的类是抽象类。(不能创建抽象类的对象,当做一个接口类使用)

纯抽象类:除了构造函数与静态成员函数意外都是纯虚函数的类。

6.析构函数是否可以重载?

答:不可以,因为它没有参数。

0 0
原创粉丝点击