C++ 继承(二)

五、构造函数和析构函数

子类对象创建和销毁: 先调用父类构造函数,再调用子类构造函数,析构顺序与构造相反(即:没有父亲哪来的儿子)。

六、继承同名成员处理方式

访问子类同名成员 直接访问即可

访问父类同名成员 需要加作用域

代码示例:

cpp 复制代码
#include <iostream>
#include <string>
using namespace std;

class Base{
    public:
        int m_A;
        Base(){
            m_A = 100;
        }
        void fun()
        {
            cout<<"Base--fun(调用)"<<endl;
        }
        void fun(int a)
        {
            cout<<"Base--fun(int a)调用"<<endl;
        }
};

class Son:public Base{
    public:
        int m_A;
        Son(){
            m_A = 200;
        }
        void fun()
        {
            cout<<"Son--fun()调用"<<endl;
        }
        void fun(int a)
        {
            cout<<"Son--fun(int a)调用"<<endl;
        }
};

int main()
{
    //创建对象
    Son son;

    //访问子类成员:直接访问
    cout<<son.m_A<<endl;
    son.fun();
    son.fun(10);

    //访问父类成员:添加父类的作用域
    cout<<son.Base::m_A<<endl;
    son.Base::fun();
    son.Base::fun(10);

}

运行结果:

cpp 复制代码
200
Son--fun()调用
Son--fun(int a)调用
100
Base--fun(调用)
Base--fun(int a)调用

总结

  1. 子类对象可以直接访问到子类中同名成员

  2. 子类对象加作用域可以访问到父类同名成员

  3. 当子类与父类拥有同名的成员函数,子类会隐藏父类中同名成员函数,加作用域可以访问到父类中同名函数

七、继承中静态成员处理

在面向对象编程中,静态函数是属于类的函数,不属于类的实例。在继承中处理静态函数时,子类可以继承父类的静态函数,但无法重写(override)静态函数。当子类调用继承自父类的静态函数时,实际上是调用父类的静态函数而不是子类的。

同名静态成员处理方式和非静态处理方式一样,只不过有两种访问的方式(通过对象名 和 通过类名)

后续静态变量会重点讲述。

相关推荐
WolfGang0073214 小时前
代码随想录算法训练营Day28 | 509.斐波那契数列、70.爬楼梯、746.使用最小花费爬楼梯
算法
Boop_wu4 小时前
[Java EE] 多线程进阶(JUC)(2)
java·jvm·算法
pale_moonlight4 小时前
十、 Scala 应用实践 (上)
大数据·开发语言·scala
6***v4174 小时前
搭建Golang gRPC环境:protoc、protoc-gen-go 和 protoc-gen-go-grpc 工具安装教程
开发语言·后端·golang
1***s6324 小时前
Rust在WebAssembly中的应用实践
开发语言·rust·wasm
水痕014 小时前
go使用cobra来启动项目
开发语言·后端·golang
scixing4 小时前
函数式编程 第八讲 循环者,递归也
开发语言·c#
2501_941879814 小时前
Python在微服务高并发异步API网关请求处理与智能路由架构中的实践
java·开发语言
闻缺陷则喜何志丹5 小时前
【SOSDP模板 容斥原理 逆向思考】3757. 有效子序列的数量|分数未知
c++·算法·力扣·容斥原理·sosdp·逆向思考
CoovallyAIHub5 小时前
如何在手机上轻松识别多种鸟类?我们发现了更简单的秘密……
深度学习·算法·计算机视觉