目录
- 面向对象编程
- Composition(复合)
- 构造和析构
- Delegation(委托)
- Inheritance(继承)
- 虚函数与多态
- 继承和composition关系下的构造和析构
- Delagation(委托)和Inheritance(继承)
- 关于虚函数与纯虚函数、非虚函数
面向对象编程
为什么需要面向对象编程?
为了让类和类之间发生关系。
Composition(复合)
表示has-a(有一个的关系)
构造和析构
其中红色的是C++为我们实现的。
Delegation(委托)
也叫Composition by reference(以指针复合)
Inheritance(继承)
表示is-a的关系
子类指向父类
继承函数,其实是继承的函数的使用权。
虚函数与多态
为什么会有这个模式?
一般地,可以先把共同的部分先写好,然后需要具体根据场景分别写的部分再交给子类完成。
继承和composition关系下的构造和析构
注意:这里的复合和继承都是先里面,后外面
对于第一种情况,经过测试先后顺序为:先继承,再复合
测试程序如下
// P12_test.cpp
// 测试composition和继承的先后关系
// 先继承---->再复合
#include <iostream>
using namespace std;
class A
{
private:
/* data */
public:
A(/* args */);
virtual ~A();
};
A::A(/* args */)
{
cout<<"A的构造函数"<<endl;
}
A::~A()
{
}
class B
{
private:
/* data */
public:
B(/* args */);
~B();
};
class A_son:public A
{
public:
A_son(){
cout<<"A_son的构造函数"<<endl;
}
private:
B b;
};
B::B(/* args */)
{
cout<<"B的构造函数"<<endl;
}
B::~B()
{
}
int main(int argc, char const *argv[])
{
/* code */
A_son a_son;
return 0;
}
/*
输出结果为:
A的构造函数
B的构造函数
A_son的构造函数
所以得出结论:先继承---->再复合
*/
Delagation(委托)和Inheritance(继承)
关于虚函数与纯虚函数、非虚函数