构造函数,析构函数,虚函数等易错混淆点
来源:互联网 发布:java转smail工具 编辑:程序博客网 时间:2024/06/05 11:39
1.构造函数是否可以是虚函数?析构函数呢?
答:构造函数不可以,虚函数是借助于虚函数表,而且是通过虚函数指针找到虚函数表,然而虚函数指针存在于对象之中,要有个对象才行,而调用构造函数的时候对象还没有建立,没有建立怎么会有虚函数指针呢?所以不可以。
析构函数可以当一个父类的析构函数被声明为虚函数的时候,我们delete一个指向子类对象的父类指针的时候,实际调用的是子类的析构函数,但是子类析构函数会自动引发父类的析构函数的调用,从而使子类特有的部分和从父类继承的部分能够释放,我们一般把父类的析构函数声明成虚函数,尽管这个析构函数什么都不做。(最好是把基类的析构函数定义为虚函数,否则当用基类去创建一个指向派生类的指针,当其释放的时候基类中的东西可能不会被释放,造成内存泄漏)
2..虚函数是否可以是内联函数?
答:不可以,虚函数是通过虚函数表,这是在运行的时候确定的,然而内联函数的替换是在编译阶段,编译的时候不知道调用哪一个虚函数所以不可以。(编译时静态的,运行是动态的)
3.静态成员函数是否可以是虚函数?
答:不可以,静态成员函数不属于哪个类,而虚函数通过虚函数指针找到虚函数表,虚函数依赖于对象指针,而静态函数不属于某各类,所以不可以。
4.虚函数表和虚函数指针在运行,编译时建立?
答:虚函数表是在编译时建立,在编译的时候把类中的虚函数地址放到虚函数表中,构成一个指针数组。
虚函数指针是在运行时建立的,他也是类的隐藏的成员,他在调用构造函数的时候执行,构造函数执行完以后虚函数指针初始化好(构造函数在运行时调用的)
5.什么是虚函数?纯虚函数?什么是抽象类?纯抽象类?
答:虚函数:被virtual修饰的成员函数。(构造函数,静态成员函数和全局函数不能被声明为虚函数)
纯虚函数:virtual 函数返回值 函数名()= 0
抽象类:有纯虚函数的类是抽象类。(不能创建抽象类的对象,当做一个接口类使用)
纯抽象类:除了构造函数与静态成员函数意外都是纯虚函数的类。
6.析构函数是否可以重载?
答:不可以,因为它没有参数。
- 构造函数,析构函数,虚函数等易错混淆点
- 构造函数、析构函数等和virtual函数
- 构造函数、析构函数、虚函数
- 虚函数/构造函数/析构函数
- 构造函数&析构函数&虚函数
- C++类构造函数,拷贝构造函数,赋值函数,析构函数几点注意
- c++类构造函数、析构函数与虚函数之间的那点小事
- 关于构造函数与析构函数几点Tips
- 构造函数与析构函数关键点
- 构造函数、析构函数、虚函数、内联函数
- C++:实例解析构造函数、析构函数、拷贝构造函数等
- 构造函数,拷贝构造函数,赋值函数,析构函数
- 构造函数,拷贝构造函数,赋值函数,析构函数
- 构造函数、析构函数、拷贝构造函数,常函数
- 构造函数、析构函数、拷贝构造函数、赋值函数
- 构造函数,析构函数
- 构造函数,析构函数
- 构造函数+析构函数
- java中四种引用类型
- 图的割点、桥和双连通分支的基本概念
- Mike and gcd problem Codeforces Round #410 (Div. 2)
- fcgi程序两种编写风格
- Android -base64/md5
- 构造函数,析构函数,虚函数等易错混淆点
- 对于python的egg安装的理解
- 设计模式之---命令模式
- thinkphp模板中,if条件的两个变量相等,判断结果却是不等
- AES 128 加密补充
- APP安全报告第十八期:热门棋牌手游的最高安全得分也只有55分!
- 【C语言常识】MDK各种Section分析
- Fragment中,RecyclerView遇到notifyDataSetChanged无效情况说明
- GridControl 通用导出excel