page contents

C++继承和派生简明教程

C++ 中的继承是类与类之间的关系,是一个很简单很直观的概念,与...

C++ 中的继承是类与类之间的关系,是一个很简单很直观的概念,与现实世界中的继承类似,例如儿子继承父亲的财产。

继承(Inheritance)可以理解为一个类从另一个类获取成员变量和成员函数的过程。例如类 B 继承于类 A,那么 B 就拥有 A 的成员变量和成员函数。

在C++中,派生(Derive和继承是一个概念,只是站的角度不同。继承是儿子接收父亲的产业,派生是父亲把产业传承给儿子。

被继承的类称为父类或基类,继承的类称为子类或派生类。“子类”和“父类”通常放在一起称呼,“基类”和“派生类”通常放在一起称呼。


派生类除了拥有基类的成员,还可以定义自己的新成员,以增强类的功能。

以下是两种典型的使用继承的场景:
1) 当你创建的新类与现有的类相似,只是多出若干成员变量或成员函数时,可以使用继承,这样不但会减少代码量,而且新类会拥有基类的所有功能。

2) 当你需要创建多个类,它们拥有很多相似的成员变量或成员函数时,也可以使用继承。可以将这些类的共同成员提取出来,定义为基类,然后从基类继承,既可以节省代码,也方便后续修改成员。

下面我们定义一个基类 People,然后由此派生出 Student 类:



  1. #include<iostream>

  2. using namespace std;

  3. //基类 Pelple

  4. class People{

  5. public:

  6. void setname(char *name);

  7. void setage(int age);

  8. char *getname();

  9. int getage();

  10. private:

  11. char *m_name;

  12. int m_age;

  13. };

  14. void People::setname(char *name){ m_name = name; }

  15. void People::setage(int age){ m_age = age; }

  16. char* People::getname(){ return m_name; }

  17. int People::getage(){ return m_age;}

  18. //派生类 Student

  19. class Student: public People{

  20. public:

  21. void setscore(float score);

  22. float getscore();

  23. private:

  24. float m_score;

  25. };

  26. void Student::setscore(float score){ m_score = score; }

  27. float Student::getscore(){ return m_score; }

  28. int main(){

  29. Student stu;

  30. stu.setname("小明");

  31. stu.setage(16);

  32. stu.setscore(95.5f);

  33. cout<<stu.getname()<<"的年龄是 "<<stu.getage()<<",成绩是 "<<stu.getscore()<<endl;

  34. return 0;

  35. }

运行结果:
小明的年龄是 16,成绩是 95.5

本例中,People 是基类,Student 是派生类。Student 类继承了 People 类的成员,同时还新增了自己的成员变量 score 和成员函数 setscore()、getscore()。这些继承过来的成员,可以通过子类对象访问,就像自己的一样。

请认真观察代码第21行:

class Student: public People

这就是声明派生类的语法。class 后面的“Student”是新声明的派生类,冒号后面的“People”是已经存在的基类。在“People”之前有一关键宇 public,用来表示是公有继承。

由此总结出继承的一般语法为:

class 派生类名:[继承方式] 基类名{
    派生类新增加的成员
};

继承方式包括 public(公有的)、private(私有的)和 protected(受保护的),此项是可选的,如果不写,那么默认为 private。我们将在下节详细讲解这些不同的继承方式。

attachments-2021-04-JfXqL7yA607832094ad49.jpg

  • 发表于 2021-04-15 20:31
  • 阅读 ( 642 )
  • 分类:C/C++开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
小柒
小柒

1478 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1478 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章