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

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

....

 

 

 

posted @ 2022-05-06 18:36  acwarming  阅读(29)  评论(0编辑  收藏  举报