1 组合关系
我们先看一下组合关系:整体与部分的关系
- 将其他类的对象作为当前类的成员使用,在用法上与普通对象完全一致
- 当前类的对象与成员对象的声明周期相同
组合关系就是整体与部分的关系,可以理解为电脑由硬盘,内存,CPU,主板组成,他们生命周期相同,其中一个坏了,电脑就不能工作了。
2 继承
继承指类之间的父子关系
- 子类是一种特殊的父类,拥有父类的所有属性和行为
- 子类对象可以当作父类对象使用
- 子类中可以添加父类中没有的方法和属性
- 子类对象可以直接初始化父类对象,可以直接赋值给父类对象
继承的意义:
继承是 C++ 中代码复用的重要手段,通过继承,可以获得父类的所有功能,并且可以在子类中重写已有的功能,或者添加新功能
下面通过一个具体的示例来说明组合与继承的关系。
编程实验:组合与继承
// 30-1.cpp
#include<iostream>
using namespace std;
class Memory
{
public:
Memory()
{
cout << "Memory()" << endl;
}
~Memory()
{
cout << "~Memory()" << endl;
}
};
class Disk
{
public:
Disk()
{
cout << "Disk()" << endl;
}
~Disk()
{
cout << "~Disk()" << endl;
}
};
class CPU
{
public:
CPU()
{
cout << "CPU()" << endl;
}
~CPU()
{
cout << "~CPU()" << endl;
}
};
class MainBoard
{
public:
MainBoard()
{
cout << "MainBroad()" << endl;
}
~MainBoard()
{
cout << "~MainBroad()" << endl;
}
};
class Computer
{
public:
Computer()
{
cout << "Computer()" << endl;
}
void power()
{
cout << "power()" << endl;
}
void reset()
{
cout << "reset()" << endl;
}
~Computer()
{
cout << "~Computer()" << endl;
}
private:
Memory mMem;
Disk mDisk;
CPU mCPU;
MainBoard mMainBroad;
};
class HPBook: public Computer
{
public:
HPBook()
{
mOS = "Windows 10";
}
void install(string os)
{
mOS = os;
}
void OS()
{
cout << mOS << endl;
}
private:
string mOS;
};
class MacBook : public Computer
{
public:
void OS()
{
cout << "Mac OS" << endl;
}
};
int main()
{
HPBook hp;
hp.power();
hp.install("Ubuntu 18.06");
hp.OS();
cout << endl;
MacBook mac;
mac.OS();
return 0;
}
- Memory,Disk mDisk,CPU mCPU 和 MainBoard 分别是四个类,这四个类的对象是类 Computer 的四个成员,这四个类和 Computer 是组合关系。
- HPBook 和 MacBook 是一种具体的 Computer,Computer是父类,HPBook 和 MacBook 是子类
- 子类拥有父类的所有属性和行为,也可以添加新的方法和属性,可以当作父类对象使用
编译运行:
$ g++ 30-1.cpp -o 30-1
$ ./30-1
Memory()
Disk()
CPU()
MainBroad()
Computer()
Power()
Ubuntu 18.06
Memory()
Disk()
CPU()
MainBroad()
Computer()
Mac OS
~Computer()
~MainBroad()
~CPU()
~Disk()
~Memory()
~Computer()
~MainBroad()
~CPU()
~Disk()
~Memory()
3 小结
1、组合是整体与局部的关系,继承是父子关系
1、子类拥有父类的所有属性和行为,子类可以添加父类中没有的属性个方法
2、子类对象可以当作父类对象使用