C++中的继承概念
时间:2020-02-23 14:29:59 来源:igfitidea点击:
我们将讨论C++中的继承。
众所周知,继承是面向对象编程中非常重要的概念或者方面。
什么是继承?
从理论上讲,C++继承是一类事物从另一类继承能力或者属性的能力。
继承实例
现在考虑上面的车辆示例。
其中"汽车"继承了"汽车"类的某些属性,而汽车又继承了"汽车"类的一些属性。
传递属性的这种能力对于支持OOP方法非常有用。
因此,C++继承可以帮助我们更接近实际模型。
此处的原理是,每个子类都与其派生类具有共同的特征。
同样,对于上面的示例,"汽车"和"牵引车"是"车辆"的子类。
另一方面,"车辆"是它们的基类。
同样,"汽车"是"汽车"和"公共汽车"的基本类别。
"汽车"和"公交车"是"汽车"的子类。
C++继承
C++单一继承的语法如下:
class derived_class_name: access_mode base_class_name { /*body or properties*/ };
其中" derived_class_name"是子类的名称,而" base_class_name"是基类的名称。
access_mode或者访问说明符定义可从派生类访问基类的哪些成员。
您可以按照给定的表格获取C++访问说明符定义。
Access Mode | public | protected | private |
members of the same class | Yes | Yes | Yes |
members of derived class | Yes | Yes | No |
not members | Yes | No | No |
Inheritance – Access Modes and Accessibility
再次考虑"车辆"示例(这次仅是"车辆","汽车"和"牵引车"类)。
我们可以表示此C++单级继承,如下面的代码片段所示。
#include<iostream> #include<cstring> using namespace std; class Vehicles //base-class { //public members public: int No_of_wheels; void set_wheels(int w) { No_of_wheels = w; } }; class Automobiles : public Vehicles //sub-class(inherits from Vehicles) { //members public: string fuel; void set_fuel_type(string str) { fuel = str; } }; class pulled_vehicles : public Vehicles //sub-class(inherits from Vehicles) { //members public: string puller; void set_puller(string str) { puller = str; } }; int main() { Automobiles A1; //Automobiles object created A1.set_wheels(4); //member function of Vehicles A1.set_fuel_type("Petrol"); //member function of Automobiles pulled_vehicles P1; //pulled_vehicles object created P1.set_wheels(3); //member function of Vehicles P1.set_puller("Horse"); //member function of pulled_vehicles //A1 properties cout<<"A1:"<<endl; cout<<"No. of wheels = "<<A1.No_of_wheels<<endl; cout<<"Fule Type = "<<A1.fuel<<endl; //P1 properties cout<<"\nP1:"<<endl; cout<<"No. of wheels = "<<P1.No_of_wheels<<endl; cout<<"Pulled by = "<<P1.puller<<endl; return 0; }
输出:
A1: No. of wheels = 4 Fule Type = Petrol P1: No. of wheels = 3 Pulled by = Horse
C++多重继承
一个类也可以从多个基类派生。
在这种情况下,子类将从所有基类继承属性。
在C++中,此功能称为多重继承。
为了使用此C++功能,基类及其访问模式应用逗号(,'
)分隔。
这样做的语法可以给出为:
class derived_class_name: access_mode1 base_class_name1, access_mode2 base_class_name2, ... , access_modeN base_class_nameN { /*body or properties*/ };
现在让我们举一个例子,一个类(C)从其他两个类(基类" A"和" B")继承属性。
我们可以可视化此简单的多继承模型,如下所示。
多重继承
#include<iostream> #include<cstring> using namespace std; class A //base-class for C { public: void A_print() { cout<<"We are in class A"<<endl; } }; class B //Another base-class for C { public: void B_print() { cout<<"We are in class B"<<endl; } }; class C : public A, public B //Multiple Inheritance { //body }; int main() { C c1; //object of class C c1.A_print(); c1.B_print(); return 0; }
输出:
We are in class A We are in class B
如您所见,这里我们可以从C中访问基类A和B的public成员。
因此,很显然,C
继承了其基类(A和B)的所有属性。
C++中继承的重要性
- 现实世界的相似性–任何OOP语言中的继承概念都使用户能够表达继承关系,从而确保与现实世界模型的紧密联系(如前所述),
- 可重用性–它还允许在不修改现有类的情况下向其添加其他功能,
- 传递性–继承是传递性的。
例如,如果类" A"继承了另一个类" B"的属性,则" A"的所有子类将自动继承" B"的属性。
此属性称为继承的传递性。