虚函数与构造函数、析构函数
来源:互联网 发布:风险数据集市 编辑:程序博客网 时间:2024/05/22 04:55
虚函数是多态的基础 (PS多态是一个接口多个实现)
多态条件:1.继承 2. 虚函数 3. 父类指针指向子类
#include<iostream>using namespace std;class myclass{public: virtual void go() { cout << "myclass" << endl; } virtual void go1() { cout << "myclass1" << endl; } virtual void go2() { cout << "myclass2" << endl; }};class classX:public myclass{public: void go() { cout << "classX" << endl; }};class classY :public myclass{public: void go() { cout << "classY" << endl; }};int main(){ myclass *p; p= new classX; p->go(); p = new classY; p->go(); cin.get(); return 0;}//其中sizeof(myclass) 为4,无论有多少虚函数
构造函数不能为虚函数,如果是虚函数,子类无法对父类进行初始化
析构函数能为虚函数,
如果使用多态,析构函数必须为虚函数,否则会造成内存泄露
虚构中:父类指针调用子类子类的析构,子类析构自动调用父类的析构
//使用多态、析构函数不是多态会造成严重的内存泄露,
因为只会完成父类的析构
#include<iostream>using namespace std;class myclass{public: char *p;public: myclass() { p = new char[1024 * 1024 * 100]; } ~myclass() { delete[]p; } virtual void go() { cout << "myclass" << endl; } virtual void go1() { cout << "myclass1" << endl; } virtual void go2() { cout << "myclass2" << endl; }};class classX:public myclass{public: int *p; classX() { p = new int[1024 * 1024 * 100]; } ~classX() { delete[] p; } void go() { cout << "classX" << endl; }};class classY :public myclass{public: void go() { cout << "classY" << endl; }};int main011(){ myclass *p; p= new classX; p->go(); p = new classY; p->go(); cin.get(); return 0;}int main(){ myclass *p; p = new classX; p->go(); delete p; cin.get(); return 0;}
阅读全文
0 0
- 虚函数与构造函数、析构函数
- 异常、虚函数与构造函数、析构函数
- 构造函数、析构函数与虚函数的关系
- 虚函数与构造函数、析构函数
- 构造函数与析构函数重的虚函数
- 虚函数与构造函数析构函数
- 虚函数与构造函数,析构函数的关系
- 虚函数与构造函数、析构函数
- 虚函数与构造函数、析构函数
- 构造函数、析构函数与虚函数的关系
- 虚函数与构造函数、析构函数
- 虚函数与构造函数、析构函数
- 构造函数、析构函数与虚函数概念
- 虚函数与构造函数、析构函数
- 构造函数、析构函数、虚函数
- 虚函数/构造函数/析构函数
- 构造函数&析构函数&虚函数
- 构造函数与析构函数
- 基于openwrt的SPI TFT触摸屏程序
- Spring依赖注入
- 插入排序
- git clone 过慢科学加快速度
- 留着以后慢慢做的DP
- 虚函数与构造函数、析构函数
- 排坑!java操作hadoop中的hdfs文件系统
- 安装ubuntu16.04过程中可能遇到的问题
- BZOJ 2301 Problem b
- 【二叉树】判断二叉树是否为平衡二叉树
- C++黑魔法系列1:进击的define
- c++学习博客
- 2017.7.11 机房测试(图论,网络流,最短路)
- Mac下编译OpenH264 for iOS