C++—继承与多态

文章目录

1 继承

类的继承可以在原有类的基础上再派生一个类。原有的类叫做基类(父类)。派生出来的类叫做派生类(子类)。类的继承机制使得C++可以实现很大限度的代码复用。定义派生类的基本形式为

class 派生类名:访问权限 基类名

访问权限有三种,分别是public,private和protected,通常定义派生类的访问权限为public。派生类可以自动获得基类中的全部数据成员和成员函数,而且除了private类型,其他类型在在派生类中可以直接访问。派生类也可以定义自己的数据成员和成员函数。

派生类的对象在生成时,也需要利用构造函数进行初始化。在初始化时,会先调用基类的构造函数,对派生类中基类的数据成员进行初始化。然后再调用派生类自己的构造函数,对派生类的数据成员进行初始化。在销毁对象时,析构函数也是分别调用的。析构函数的调用顺序与构造函数相反。

对于不同的基类成员,访问权限是不同的

成员类型 访问权限
public 在类外和派生类中都可以访问
private 只能在类内访问,不能在类外和派生类中访问
protected 类内和派生类都可以访问,类外不可以访问

如果再定义一个成员时,没有指定访问说明符,默认为private。通过一个例子来了解一下继承

#include<iostream>

using namespace std;

// 基类
class temp
{
    
    
    public:
        string name;
        int age;
};

class temp1 : public temp
{
    
    
    public:
        string number;
};

int main()
{
    
    
    temp1 a;   // 定义一个类tenp1的对象
    
    // 给对象a的成员赋值
    a.name = "ertu";
    a.age = 23;
    a.number = "20230714";
    
    // 输出对象a成员
    cout << "姓名:" << a.name << endl;
    cout << "年龄:" << a.age << endl;
    cout << "编号:" << a.number << endl;
    
    return 0;
}

输出结果为

姓名:ertu
年龄:23
编号:20230714

在派生类中可以定义一个与基类成员函数同名的函数,返回类型,参数个数和参数类型都可以相同。对于在基类中已经有定义的函数,如果在派生类中再定义一个同名的函数,这称为重构或者覆盖。对于在基类中仅有声明的函数,如果在派生类中定义一个同名的函数,这成为实现

#include<iostream>

using namespace std;

// 基类
class temp
{
    
    
    public:
        void function1 ()
        {
    
    
            cout << "调用基类函数1" << endl;
        }
        
        void function2 ();   // 仅有一个声明
};

class temp1 : public temp
{
    
    
    public:
        
        // 重置基类成员函数1
        void function1 ()
        {
    
    
            cout << "调用派生类成员函数1" << endl;
        }
        
        // 实现基类成员函数2
        void function2 ()
        {
    
    
            cout << "调用派生类成员函数2" << endl;
        }
};

int main()
{
    
    
    temp a;   // 定义一个temp类的对象
    temp1 b;   // 定义一个类tenp1的对象
    
    // 调用成员函数
    a.function1();
    // a.function2();   // 基类中没有function的实现,不能调用
    b.function1();
    b.function2();
    
    return 0;
}

输出结果为

调用基类函数1
调用派生类成员函数1
调用派生类成员函数2

2 多态

/-------------------------------------------------2023.07.14未完成------------------------------------------------------/

扫描二维码关注公众号,回复: 15717415 查看本文章

猜你喜欢

转载自blog.csdn.net/qq_45217381/article/details/131725737
今日推荐