C++继承细节 -1
2024-09-04 14:03:41
- 为什么基类析构函数最好要使用 virtual 进行修饰?
class A {
private:
......
public:
~A();
A() {}
};
class B : public A {
private:
......
public:
~B();
B() {}
};
A *aPtr = new B;
执行delete aPtr
后,如果A类中的析构函数为虚函数;则先调用B类中的析构函数在调用A类中的析构函数;否则只调用A类中的析构函数。
- 派生类重新定义基类中的虚方法 规则
- 确保与原来的类型完全相同(参数、参数类型、参数顺序、方法名), 如果方法返回类型为基类指针或引用则将其改为指向派生类指针或引用。
class A {
......
public:
A() {}
~A() {}
virtual A *getInstance();
};
class B public A {
......
public:
B() {}
~B() {}
virtual B *getInstance();
};
2. 如果基类中的虚方法被重载,则在派生类中应重新定义全部重载版本,否则将隐藏其他版本。
class A {
......
public:
A() {}
~A() {}
virtual A *getInstance();
virtual A *getInstance(int a);
virtual A *getInstance(double d);
};
class B public A {
......
public:
B() {}
~B() {}
virtual B *getInstance();
virtual B *getInstance(int a);
virtual B *getInstance(double d);
};
最新文章
- Genymotion安装及遇到的问题
- 一个很奇怪的问题,程序没有改动加密参数应该也没有变化.但是两次的加密结果却不一致.md5加密问题
- tornado 反向代理后 获取真实客户端IP
- STL容器
- js中各种跨域问题实战小结(一)
- 《Java程序设计》第五次实验实验报告
- IIC总线协议---以存储芯片at24c64为例
- JS 实现 startWith endWith函数
- Js之Screen对象
- linux 内核协议栈收报流程(二)Netfilter全貌
- 如何卸载CentOS自带的apache
- [转载]binlog归档
- SQL中MAX()
- c语言第五次作业--函数
- ProgressBar的简单使用
- Python使用Socket写一个简单聊天程序
- Vue 无限滚动加载指令
- GTID做mysql主从时报错
- bitset相关
- iOS 为什么使用xcode8上传app包到appStore无法构建版本