C++面向对象编程之虚函数与多态和继承和复合下的构造和析构
2024-10-20 11:29:19
1.对于非虚函数,是不希望派生类对该函数重新定义;
对于virtual函数,在父类已经有默认定义后,并希望子类重新定义它;
对于pure virtual函数,父类没有默认定义,派生类必须要重新定义它;
2.当有继承和复合下的构造和析构的运作:
1)当派生类里有复合的情况下,构造顺序会是什么样的呢?
#include <bits/stdc++.h>
using namespace std; class A {
public:
A() { cout << "A\n"; }
}; class B {
public:
B() { cout << "B\n"; }
}; class C : public A {
public:
C() { cout << "C\n"; } protected:
B b;
}; int main() {
C c;
return 0;
}
我很简单的写了下代码,不管规范问题,实际运行的结果是ABC,就是先执行父类的构造,再复合的构造,再自己的,也就是如上方右图所示,父类在上面;
2)当父类里有复合的情况,又是如何构造呢?
#include <bits/stdc++.h>
using namespace std; class B {
public:
B() { cout << "B\n"; }
}; class A {
public:
A() { cout << "A\n"; } protected:
B b;
}; class C : public A {
public:
C() { cout << "C\n"; }
}; int main() {
C c;
return 0;
}
执行结果为BAC,符合由内而外的形式,如上图右方所示;
析构根据由外而内来执行,不写了;
3.委托和继承
....
最新文章
- FileItem类的常用方法
- vim 标记 mark 详解 (转载)
- CSS3硬件加速需要注意的事项
- (35)odoo中widget
- hdu 1269 迷宫城堡 强连通分量
- How to delete expired archive log files using rman?
- HDU 5795:A Simple Nim(博弈)
- 将表A的数据复制到表B,以及关于主表和子表的删除办法
- C指针(转)
- linux 下apache2 安装
- OpenGL shader渲染贴图
- Pytorch系列教程
- Python网络爬虫-信息标记
- [Swift]LeetCode906. 超级回文数 | Super Palindromes
- redis持久化和主从同步
- C#操作DbConnection类
- Html5、css、JavaScript基础
- 使用Spring-data-jpa(2)(三十一)
- 《DSP using MATLAB》Problem5.16
- vue-cli 3.x 使用