日志21

类的继承与派生、构造与析构、多继承及名字隐藏

一、类的继承与派生

类的继承是面向对象编程中的一个核心概念,它允许新的类(派生类)从已有的类(基类或父类)那里继承已有的特性。这一过程也可以看作是从已有类产生新类的过程,即类的派生。

继承方式

公有继承(public):基类的公有(public)和保护(protected)成员在派生类中保持不变,但基类的私有(private)成员不可被派生类直接访问。通过派生类对象只能访问到基类的公有成员。

私有继承(private):基类的公有和保护成员都以私有身份出现在派生类中,基类的私有成员同样不能被直接访问。通过派生类的对象不能直接访问基类中的任何成员。

保护继承(protected):基类的公有和保护成员以保护的身份出现在派生类中,基类的私有成员不能被直接访问。通过派生类的对象也不能直接访问基类中的任何成员。

派生类的声明

派生类的声明通过指定继承方式和基类名来完成。例如:

class 派生类名 : 继承方式 基类名 {
    // 派生类的主体
};

基类与派生类的对应关系

单继承:派生类只从一个基类派生。

多继承:派生类从多个基类派生。

多重派生:由一个基类派生出多个不同的派生类。

多层派生:派生类又作为基类,继续派生出新的类。

二、构造与析构

构造函数

构造函数是一个特殊的成员函数,它在对象创建时自动调用,用于初始化对象的成员变量。构造函数的名称必须与类名相同,且不能有返回值类型。

特性:

1.自动调用:在对象实例化时自动调用。

2.初始化成员变量:主要作用是初始化对象的成员变量。

3.重载:一个类可以有多个构造函数,只要它们的参数列表不同。

4.初始化列表:可以使用初始化列表来初始化成员变量,特别是当成员变量是常量或引用类型时。

继承中的调用顺序:

在继承中,基类的构造函数会在派生类的构造函数之前被调用。可以通过初始化列表显式调用基类的构造函数。

析构函数

析构函数是在对象消亡之前进行一些必要的清理工作的函数。它没有类型,也没有参数。析构函数的执行顺序与构造函数相反。

特性:

不被继承:派生类需要自行声明析构函数。

自动调用:对象销毁时,系统会自动隐式调用析构函数。

执行顺序:析构函数的调用次序与构造函数的调用次序相反。

三、多继承

多继承是面向对象编程中的一个特性,它允许一个类从多个类继承属性和方法。这在某些情况下可以提高代码的复用性和灵活性。

多继承的声明

多继承的声明方式与单继承类似,只是在继承方式后列出了多个基类名。例如:

class 派生类名 : 继承方式1 基类名1, 继承方式2 基类名2, ..., 继承方式n 基类名n {
    // 派生类的主体
}; 

多继承下的构造函数

在多继承的情况下,派生类的构造函数需要负责所有基类构造函数的调用。派生类构造函数的参数个数必须包含完成所有基类初始化所需的参数个数。构造函数的执行顺序是先执行所继承基类的构造函数,再执行派生类本身的构造函数。

二义性问题

多继承可能会带来二义性问题。当派生类从多个基类派生,而这些基类又从同一个基类派生时,访问此共同基类中的成员将产生二义性。为了解决这个问题,可以使用虚基类。

四、名字隐藏

名字隐藏是C++中的一个重要概念,它发生在继承关系中。当派生类重新定义了基类的非virtual函数时,编译器会采用名字隐藏机制。

名字隐藏机制

1.编译器会从当前域(如派生类对象调用时,会在派生类的定义内查找)开始查找需要的名字

2.如果在当前域没有找到,编译器会在外围作用域继续查找,先是基类的定义内,然后是全局名字空间。

3.一旦在某个作用域内找到需要的名字,编译器就会停下来,并就该作用域内的名字进行决议。这意味着往外层的作用域就不予考虑了,从而将外层作用域的同名函数隐藏。

4.如果在多个作用域内找到了同名的函数,编译器会尝试选出最优的函数。如果选不出最优的,就会产生二义性错误。

名字隐藏的例子

class Base {
public:
    void func() {
        // 基类的实现
    }
};

class Derived : public Base {
public:
    void func() {
        // 派生类的实现
    }
};

int main() {
    Derived d;
    d.func(); // 调用的是派生类的func函数,基类的func函数被隐藏
    return 0;
}

在这个例子中,派生类Derived重新定义了基类Base的func函数。因此,当通过派生类对象d调用func函数时,调用的是派生类的实现,基类的实现被隐藏。

全部评论

相关推荐

01-30 23:44
生物工程
点赞 评论 收藏
分享
环保行业作为推动可持续发展的关键领域,正迎来前所未有的发展机遇。掌握环保技术,积累项目经验,轻松搞定绿色offer,开启环保领域的高薪职业生涯。一、环保行业的热门技能环保行业对技术能力要求极高,掌握核心技能是关键。污染治理技术是基础,熟悉废水处理、废气净化和固废处理等技术,能够帮助你解决实际环境问题。环境监测则涉及水质监测、大气监测和土壤监测等技术,掌握这些技能能够确保环境数据的准确性和可靠性。此外,环境工程设计和项目管理也是必备技能,通过掌握环境工程设计原则和项目管理方法,能够帮助你高效完成环保项目。这些技能不仅能够提升你的专业能力,还能在求职中增加你的竞争力,帮助你轻松搞定绿色offer。二、如何提升环保技能提升环保技能需要理论学习与实践相结合。参加专业课程和培训,如环境工程认证课程,系统学习理论知识。参与实际项目是提升技能的关键。可以通过实习或参与环保项目,积累实际经验。例如,参与一个废水处理项目的实施,从项目规划到设备安装,再到调试运行,全程参与,不仅能提升你的技术能力,还能为简历增添亮点,增加搞定绿色offer的机会。关注行业动态,参加环保研讨会和学术会议,了解最新技术和应用场景,也是提升技能的重要途径。三、环保行业求职技巧在求职过程中,展示你的技术能力和项目经验是关键。优化简历,突出你在环保项目中的角色和成果,如成功实施的废水处理项目、优化的环境监测方案等。准备面试时,熟悉常见问题和案例分析,展示你的逻辑思维和问题解决能力。此外,建立个人品牌也很重要。通过维护LinkedIn等社交媒体上的专业形象,分享你的技术见解和项目经验,能够提升你的行业知名度,吸引更多潜在雇主的关注,从而轻松搞定绿色offer。参加行业活动,结识行业内专业人士,也能为你提供更多的求职机会和职业发展建议。#牛客AI配图神器#
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
正在热议
更多
牛客网
牛客企业服务