简介
面向对象程序设计中最重要的一个概念是继承。继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易。这样做,也达到了重用代码功能和提高执行时间的效果。
当创建一个类时,您不需要重新编写新的数据成员和成员函数,只需指定新建的类继承了一个已有的类的成员即可。这个已有的类称为基类,新建的类称为派生类。
C++中的继承关系就好比现实生活中的父子关系,继承一笔财产比白手起家要容易得多,原始类称为基类,继承类称为派生类,它们是类似于父亲和儿子的关系,所以也分别叫父类和子类。而子类又可以当成父类,被另外的类继承。继承的方式有三种分别为公有继承(public),保护继承(protect),私有继承(private)。
public
- 公有继承(public):当一个类派生自公有基类时,基类的公有成员也是派生类的公有成员,基类的保护成员也是派生类的保护成员,基类的私有成员不能直接被派生类访问,但是可以通过调用基类的公有和保护成员来访问。
#include<iostream.h>
class Animal{
public:
void eat(){
cout<<"animal eat"<<endl;
}
void sleep(){
cout<<"animal sleep"<<endl;
}
void breath(){
cout<<"animal breathe"<<endl;
}
};
class Fish: public Animal{
};
void main(){
Animal an;
an.eat();
//Fish.breathe();
Fish fh;
fh.breathe();
}
代码中我们可以看出,Fish中虽然里面都没写内容,但是依然可以用Animal中的方法,体现了继承的便捷之处,提高了代码的重用率。
protected
- 保护继承(protected): 当一个类派生自保护基类时,基类的公有和保护成员将成为派生类的保护成员。保护继承的特点是基类的所有公有成员和保护成员都成为派生类的保护成员,并且只能被它的派生类成员函数或友元访问,基类的私有成员仍然私有,且对派生类不可见。
#include<iostream.h>
class Animal{
public:
void eat(){
cout<<"animal eat"<<endl;
}
protected:
void sleep(){
cout<<"animal sleep"<<endl;
}
void breath(){
cout<<"animal breathe"<<endl;
}
};
class Fish: public Animal{
void test(){
sleep();
breathe();
}
};
void main(){
Animal an;
an.eat();
//an.breathe(); //权限是被保护的,除了其本身和子类以外,外部是不可以访问的。
Fish fh;
//fh.breathe(); //权限是被保护的,除了其本身和子类以外,外部是不可以访问的。
}
private
- 私有继承(private):当一个类派生自私有基类时,基类的公有和保护成员将成为派生类的私有成员。私有继承的特点是基类的公有成员和保护成员都作为派生类的私有成员,并且不能被这个派生类的子类所访问。
#include<iostream.h>
class Animal{
public:
void eat(){
cout<<"animal eat"<<endl;
}
protected:
void sleep(){
cout<<"animal sleep"<<endl;
}
private:
void breathe(){
cout<<"animal breath"<<endl;
}
};
class Fish: public Animal{
void test(){
sleep();
//breathe(); //此时这个方法已经不能再次访问,因为基类的私有成员其派生类也不可以访问。
}
};
void main(){
Animal an;
an.eat();
//an.breathe();
//Fish.breathe();
//Fish fh;
//fh.breathe();
}