参考链接
继承操作
继承操作可以通过一个已有类来定义新的类。说白了就是当我们在定义一个新类的时候,不需要重新编写新的类成员和方法,可以继承已有的类成员即可。其中,已有的类为基类,新创建的类成为派生类。
派生类可以从多个基类进行继承,下面看一下派生类的定义方法:
class 派生类名: 访问权限(public/private/protect) 基类;
下面通过实例来说明一下:
#include <iostream>
using namespace std;
//基类
class AnimalClass
{
public:
AnimalClass();
int setAnimalFeature(int iTmpVar1, float iTmpVar2);
~AnimalClass ();
protected:
int iAge;
float iHigh;
};
AnimalClass::AnimalClass (){}
int AnimalClass::setAnimalFeature(int iTmpVar1, float iTmpVar2)
{
iAge = iTmpVar1;
iHigh = iTmpVar2;
return 1;
}
AnimalClass ::~AnimalClass (){}
//派生类
class DogClass : public AnimalClass //声明派生类
{
public:
DogClass();
~DogClass();
int getDogInfo();
private:
};
DogClass::DogClass(){}
int DogClass::getDogInfo()
{
cout << "狗的年龄:" << iAge << "高度:" << iHigh << endl;
return 1;
}
DogClass::~DogClass(){}
int main()
{
DogClass dog1;
dog1.setAnimalFeature(2, 0.5); //这里调用基类里面的方法和类成员变量
dog1.getDogInfo();
getchar();
}
运行结果
狗的年龄:2高度:0.5
注:上面讲解了派生类继承了一个基类里面的方法和类成员变量,下面我们来说一个继承多个基类的使用方法:
class 派生类名:<访问权限1> 基类1, <访问权限2> 基类2,...
{
/*核心语句*/
}
举例说明
#include <iostream>
using namespace std;
//基类1
class AnimalClass
{
public:
AnimalClass();
int setAnimalFeature(int iTmpVar1, float iTmpVar2);
~AnimalClass ();
protected:
int iAge;
float iHigh;
};
AnimalClass::AnimalClass (){}
int AnimalClass::setAnimalFeature(int iTmpVar1, float iTmpVar2)
{
iAge = iTmpVar1;
iHigh = iTmpVar2;
return 1;
}
AnimalClass ::~AnimalClass (){}
//基类2
class FoodClass
{
public:
FoodClass();
~FoodClass();
int setEatFood(char * cTmpName);
protected:
char * cFoodName;
};
FoodClass ::FoodClass(){}
int FoodClass::setEatFood(char * cTmpName)
{
cFoodName = cTmpName;
return 1;
}
FoodClass ::~FoodClass(){}
//派生类
class DogClass : public AnimalClass, public FoodClass //声明派生类
{
public:
DogClass();
~DogClass();
int getDogInfo();
int getDogEatFood();
private:
};
DogClass::DogClass(){}
int DogClass::getDogInfo()
{
cout << "狗的年龄:" << iAge << "高度:" << iHigh << endl;
return 1;
}
int DogClass::getDogEatFood()
{
cout << "狗的喜欢吃:" << cFoodName << endl;
return 1;
}
DogClass::~DogClass(){}
int main()
{
DogClass dog1;
dog1.setAnimalFeature(2, 0.5); //这里调用Animal基类里面的方法和类成员变量
dog1.setEatFood("Meat");
dog1.getDogInfo(); //这里调用Food基类里面的方法和类成员变量
dog1.getDogEatFood();
getchar();
}
运行结果
狗的年龄:2高度:0.5
狗的喜欢吃:Meat
聊完了派生类中继承单个基类和多个基类,下面我们来说一下访问权限的作用,访问权限主要有public、private、protected三种:
public(公有继承):保持基类里面方法和类变量的访问控制,即原先为public权限,继承下来同样为public权限;即原先为protected权限,继承下来同样为protected权限;privated不能派生访问,但是可以调用public和protected成员来进行访问。
protected(保护继承): 当一个类派生自保护基类时,基类的公有和保护成员将成为派生类的保护成员。
private(私有继承):当一个类派生自私有基类时,基类的公有和保护成员将成为派生类的私有成员
其实,就是取派生类访问权限和基类权限的交集。
说明:派生也不是类中所有成员和变量都可以进行派生的,例如:基类的构造函数、析构函数和拷贝构造函数、基类的重载运算符、基类的友元函数,就不能进行派生访问。
下面通过表来看一下,类中访问权限的作用范围:
更多《计算机视觉与图形学》知识,可关注下方公众号: