侯捷P11面向对象编程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了侯捷P11面向对象编程相关的知识,希望对你有一定的参考价值。


目录

  • ​​面向对象编程​​
  • ​​Composition(复合)​​
  • ​​构造和析构​​
  • ​​Delegation(委托)​​
  • ​​Inheritance(继承)​​
  • ​​虚函数与多态​​
  • ​​继承和composition关系下的构造和析构​​
  • ​​Delagation(委托)和Inheritance(继承)​​
  • ​​关于虚函数与纯虚函数、非虚函数​​

面向对象编程

为什么需要面向对象编程?

为了让类和类之间发生关系。

【侯捷P11】面向对象编程_c++


Composition(复合)

表示has-a(有一个的关系)

【侯捷P11】面向对象编程_c++_02

【侯捷P11】面向对象编程_面向对象编程_03

【侯捷P11】面向对象编程_c++_04


构造和析构

【侯捷P11】面向对象编程_构造函数_05

其中红色的是C++为我们实现的。


Delegation(委托)

也叫Composition by reference(以指针复合)

【侯捷P11】面向对象编程_面向对象编程_06

Inheritance(继承)

表示is-a的关系

【侯捷P11】面向对象编程_虚函数_07

子类指向父类

继承函数,其实是继承的函数的使用权。

【侯捷P11】面向对象编程_面向对象编程_08

虚函数与多态

【侯捷P11】面向对象编程_虚函数_09

为什么会有这个模式?

一般地,可以先把共同的部分先写好,然后需要具体根据场景分别写的部分再交给子类完成。

【侯捷P11】面向对象编程_c++_10

【侯捷P11】面向对象编程_面向对象编程_11


继承和composition关系下的构造和析构

注意:这里的复合和继承都是先里面,后外面

【侯捷P11】面向对象编程_c++_12

对于第一种情况,经过测试先后顺序为:先继承,再复合

测试程序如下

// 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的构造函数

所以得出结论:先继承---->再复合
*/

【侯捷P11】面向对象编程_c++_13

Delagation(委托)和Inheritance(继承)

【侯捷P11】面向对象编程_虚函数_14

关于虚函数与纯虚函数、非虚函数

【侯捷P11】面向对象编程_面向对象编程_15


以上是关于侯捷P11面向对象编程的主要内容,如果未能解决你的问题,请参考以下文章

C++面向对象编程

C++面向对象编程

C++面向对象编程

[C++ 面向对象高级编程]知识点补充1

[C++ 面向对象高级编程]string类的实现过程

[C++ 面向对象高级编程]Complex类的实现过程