之前我讲过面向对象是实物抽象化的方法(详情情况关注本专栏里面有解释),而现实事务互相之间是相互联系的,其中重要的关系就是“........是一种”的关系
继承实例
//面向对象继承
//作者:分解机226
//交通工具
class VEHICLE
{
public:
VEHICLE() { numpassengers = 0; }
void move() {};
protected:
int numpassengers;//乘客数量
};
//飞机
class air :public VEHICLE
{
public:
air() {};
};
//有轮交通工具
class wheel :public VEHICLE
{
public:
wheel() {};
};
//汽车
class car :public wheel
{
public:
car() {};
};
int main()
{
return 0;
}
上面的代码展示了简单的3层继承关系,我们来看看它们之间的关系
我们可以看到继承的语法有两部分组成:一是紧跟在类名和冒号后面的访问控制符,二是基类的名字,这个基类可以不止一个,可以用逗号分隔一个基类列表。只要访问权限允许,一个类在继承了某个基类一后就可以无须声明的使用基类的成员。
//面向对象继承
//作者:分解机226
//基类必须已定义
class base{};;
class drive :public base
{
public:
drive() {};
protected:
int a;
};
int main()
{
return 0;
}
如果上面的代码base只是声明了而没有定义,就会报错。
在面向对象中除了刚刚的关系还有一种关系就是包含关系,来看下面的例子
//面向对象继承
//作者:分解机226
//面向对象继承
//作者:分解机226
//交通工具
class VEHICLE
{
public:
VEHICLE() { numpassengers = 0; }
void move() {};
protected:
int numpassengers;//乘客数量
};
//轮子
class wheel
{
public:
wheel() { size = 14; }
private:
int size;
};
//引擎
class engine
{
public:
engine() { cap = 2000; }
private:
int cap;
};
//汽车
class car :public VEHICLE
{
public:
car(){}
protected:
vector<wheel> wheel;
engine eng;
};
我们可以看到汽车和交通工具是Is-a的关系,而汽车和轮子以及引擎的关系是Has-a的关系。