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 Modepublicprotectedprivate
members of the same classYesYesYes
members of derived classYesYesNo
not membersYesNoNo

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"的属性。
    此属性称为继承的传递性。