写点什么

C++ 中的继承和派生

作者:向阳逐梦
  • 2023-08-30
    四川
  • 本文字数:1284 字

    阅读完需:约 4 分钟

C++中的继承和派生

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

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

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

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

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

以下是两种典型的使用继承的场景:

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

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

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

    #include<iostream>    using namespace std;    //基类 Pelple    class People{    public:        void setname(char *name);        void setage(int age);        char *getname();        int getage();    private:        char *m_name;        int m_age;    };    void People::setname(char *name){ m_name = name; }    void People::setage(int age){ m_age = age; }    char* People::getname(){ return m_name; }    int People::getage(){ return m_age;}    //派生类 Student    class Student: public People{    public:        void setscore(float score);        float getscore();    private:        float m_score;    };    void Student::setscore(float score){ m_score = score; }    float Student::getscore(){ return m_score; }    int main(){        Student stu;        stu.setname("小明");        stu.setage(16);        stu.setscore(95.5f);        cout<<stu.getname()<<"的年龄是 "<<stu.getage()<<",成绩是 "<<stu.getscore()<<endl;        return 0;    }
复制代码

运行结果:小明的年龄是 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。

发布于: 刚刚阅读数: 5
用户头像

向阳逐梦

关注

人生享受编程,编程造就人生! 2022-06-01 加入

某公司芯片测试工程师,嵌入式开发工程师,InfoQ签约作者,阿里云星级博主,华为云·云享专家。座右铭:向着太阳,追逐梦想!

评论

发布
暂无评论
C++中的继承和派生_向阳逐梦_InfoQ写作社区