C++面向对象编程之虚函数与多态和继承和复合下的构造和析构

2022-12-11,,,,

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.委托和继承

....

C++面向对象编程之虚函数与多态和继承和复合下的构造和析构的相关教程结束。

《C++面向对象编程之虚函数与多态和继承和复合下的构造和析构.doc》

下载本文的Word格式文档,以方便收藏与打印。