C++继承

前言

        在本文中,您将学习有关C ++中继承的所有知识。更具体地说,继承是什么以及通过示例实现继承的不同方法。
        继承是C ++中面向对象编程的主要功能之一。它允许用户从现有的类(基类)创建一个新的类(派生类)。派生类继承了基类的所有功能,并且可以拥有自己的其他功能。

为什么要使用继承?

        假设您在游戏中需要三个角色-一个数学老师(Maths teacher),一个足球运动员(Footballer)和一个商人(Businessman)。由于所有角色都是人,因此他们可以走路和说话。但是,他们各自也有一些特殊技能。数学老师可以教数学,足球运动员可以踢足球,商人可以经营企业。您可以单独创建三个可以走路,说话和执行其特殊技能的类,如下图所示。

C++继承_第1张图片

        在每个类中,您将为每个角色复制相同的Walk(走路)和说话(Talk)代码。如果要添加新功能-eat(吃饭),则需要为每个字符实现相同的代码。这很容易导致错误(复制时)和重复代码。如果我们拥有一个Person类,它具有基本的功能,例如说话,走路,吃饭,睡觉,并根据我们的角色向这些功能添加特殊技能,那就容易得多。这是使用继承完成的。

C++继承_第2张图片

        使用继承,现在您不必为每个类实现相同的代码。您只需要继承它们即可。因此,对于数学老师(派生类),您可以继承Person(基类)的所有功能并添加新功能TeachMaths(教数学)。同样,对于足球运动员,您继承了Person的所有功能并添加了新功能PlayFootball(踢足球)等。这使您的代码更简洁,易于理解和可扩展。重要的是要记住:当使用继承时,每个派生类都应该满足条件,不管它是否是基类。在上面的实例中,数学老师是一个人,足球运动员是一个人。你不可能拥有:商人就是企业

C ++编程中继承的实现

class Person 
{
  ... .. ...
};

class MathsTeacher : public Person 
{
  ... .. ...
};

class Footballer : public Person
{
  .... .. ...
};

        在上面的示例中,Person类是基类,而MathsTeacher和Footballer类则是从Person派生出来的。派生的类与类的声明一起出现,后跟冒号,关键字public和派生该类的基类名称。由于MathsTeacher和Footballer是从Person派生的,因此可以从它们访问Person的所有成员数据和成员函数。

示例:C ++编程中的继承

使用继承概念创建游戏角色。

#include

class Person {
public:
	std::string profession;
	int age;

	Person() :profession("unemployed"), age(16) {}

	void display() {
		std::cout << "我的职业是:" << profession << std::endl;
		std::cout << "我的年龄是:" << age << std::endl;
		walk();
		talk();
	}

	void walk() {
		std::cout << "我会走路!" << std::endl;
	}

	void talk() {
		std::cout << "我会说话!" << std::endl;
	}
};

// MathTeacher类派生自基类Person
class MathTeacher :public Person {
public:
	void teachMaths() {
		std::cout << "我会教数学!" << std::endl;
	}
};

// Footballer类派生自基类Person
class Footballer :public Person {
public:
	void playfootball() {
		std::cout << "我会踢足球!" << std::endl;
	}
};
int main() {
	MathTeacher teacher;
	teacher.profession = "老师";
	teacher.age = 23;
	teacher.display();
	teacher.teachMaths();

	Footballer footballer;
	footballer.profession = "运动员";
	footballer.age = 24;
	footballer.display();
	footballer.playfootball();
	return 0;
}

输出结果: 

C++继承_第3张图片

上述程序说明 

        在此程序中,Person是基类,而MathsTeacher和Footballer则从基类Person派生出来的。Person类具有两个数据成员- profession和age。它还具有两个成员函数- walk()和talk()。即MathsTeacher和Footballer可以访问Person的所有的数据成员和成员函数。但是,MathsTeacher和Footballer也分别具有自己的成员函数:teachMaths()和playFootball()。这些函数只能由自己的类访问。

        在main()函数中,创建了一个新MathsTeacher teacher对象。因为,它可以访问Person的数据成员,因此可以设置teacher的profession(职业)和age(年龄)。使用Person类中定义的display()函数显示此数据。 同样,在MathsTeacher类中定义了teachingMaths()函数。同样,还将创建一个新Footballer footballer对象。它也可以访问Person的数据成员,也可以通过调用display()函数来显示。然后只有足球运动员(footballer)才能访问的playFootball()函数。

继承中的访问说明符

        从基类创建派生类时,可以使用不同的访问说明符来继承基类的数据成员。这些可以是public, protected 或 private。在上面的实例中,基类Person被MathsTeacher和football公开地继承了。了解有关C ++中的公共继承,保护继承和私有继承的更多信息。

继承中的成员函数重写

        假设基类和派生类的成员函数具有相同的名称和参数。如果创建派生类的对象并尝试访问该成员函数,则只能调用派生类中的成员函数。派生类的成员函数将覆盖基类的成员函数。了解有关C ++中的函数重写的更多信息。

 

你可能感兴趣的:(C++,c++,开发语言)