继续学习C++,学习到继承和派生
定义:
类的继承,是新的类从已有类那里得到已有的特性。或从已有类产生新类的过程就是类的派生。原有的类称为基类或父类,产生的新类称为派生类或子类。
派生与继承,是同一种意义两种称谓。(继承相当于“子承父业”,而派生相当于“父亲派生出了一个儿子”,两者的角度不同,本质一样)
下例就是一个继承:
//C++通过继承关系,实现了代码的可重用性
class Human //父类:体现的是共性
{
public:
void eat(string food)
{
cout<<"i am eating "<<food<<endl;
}
};
class Student : public Human //子类:是在父类的基础上增加新的功能,体现的是个性
{
public:
void study(string course)
{
cout<<"i am learning "<<course<<endl;
}
};
对于is-a
is-a是一种属于关系,如:狗属于一种动物,车属于一种交通工具(Dog is an Animal. Car is a Vehicle.)在面向对象中表现为一种继承关系。可以设计一个Animal类,Dog类作为 Animal类(基类)的派生类;设计一个Vehicle类,Car类作为Vehicle类(基类)的派生类。
has-a是一种包含、组合关系。如:车包含方向盘、轮胎、发动机(Car has steering-wheel,wheels,engine),但不能说方向盘/轮胎/发动机是一种车;正确的应该说车聚合(包含)了方向盘、轮胎、发动机。
因此,如果A是(is a)B,则B是A的基类,A是B的派生类。为继承关系。
如果A包含B,则B是A的组成部分。为聚合关系,可以由组成部分聚合成为一个类。
语法
class 派生类名:[继承方式] 基类名 //[继承方式]这里有括号,说明是可以省略的,若写成 class 派生类名:[] 基类名
{ //则表示 class 派生类名:[private] 基类名
派生类成员声明;
}; //注意分号
重新看下面例子
class Human
{
public:
void eat(string food)
{
cout<<"i am eating "<<food<<endl;
}
};
class Student : public Human
//这里的public表示的是继承方式 若把public省略就是默认private
{
public: //这里的public表示的是访问权限
void study(string course)
{
cout<<"i am learning "<<course<<endl;
}
};
继承方式
继承方式规定了如何访问基类继承的成员。继承方式有public,private,protected。继承方式不影响派生类的访问权限,影响了从基类继承来的成员的访问权限,包括派生类内的访问权限和派生类对象。
分为三大类:
公有继承:基类的公有成员和保护成员在派生类中保持原有访问属性,其私有成员仍为基类的私有成员。
私有继承:基类的公有成员和保护成员在派生类中成了私有成员,其私有成员仍为基类的私有成员。
保护继承:基类的公有成员和保护成员在派生类中成了保护成员,其私有成员仍为基类的私有成员。
保护继承(protected)对于外界访问属性来说,等同于私有,但可以派生类中可见。
版权声明:本文为博主原创文章,未经博主允许不得转载