讲师中心 微信公众号

工具推荐

视频效率加速
立刻MV
立刻MV

低成本歌曲 MV、视频生成

Seko
Seko

AI短剧一键生成成片

Laper
Laper

剧本策划到成片协作

剧云
剧云

中文短剧剧本制作平台

c++中如何继承基类成员_c++单继承与多继承方法【重点】

胖枫同学_4885

胖枫同学_4885

发布时间:2026-03-15 18:19:37

|

937人浏览过

|

来源于php中文网

原创

基类private成员在派生类中不可见,仅因访问权限受限;public继承下基类public/protected成员保持原访问级,protected/private继承会降级;构造需显式初始化列表;多继承二义性用作用域解析或虚继承解决;重写须基类virtual+派生类override。

c++中如何继承基类成员_c++单继承与多继承方法【重点】

基类成员在派生类里“看不见”?检查访问控制和继承方式

派生类默认不能访问 private 成员,哪怕是在同一个类定义里写继承也不行。这是最常卡住人的地方——不是语法错,是权限拦住了。

常见错误现象:error: 'xxx' is private within this context,尤其当基类把构造函数或关键字段设为 private 时。

  • 基类的 public 成员,在 public 继承下仍是 public;在 protected 或 private 继承下会降级
  • 基类的 protected 成员,在 public 和 protected 继承下保持 protected;在 private 继承下变成 private
  • 别用 private 继承除非真想“隐藏接口”,它会让所有基类成员在派生类中变成私有,外部和子类都不可见

单继承时构造函数怎么调?必须显式转发基类参数

派生类构造函数不会自动调用基类构造函数,C++ 不会帮你猜参数。漏写初始化列表,轻则编译失败,重则调用默认构造(如果存在),导致对象处于未预期状态。

使用场景:基类没有默认构造函数,或者你需要传特定值初始化父部分。

立即学习“C++免费学习笔记(深入)”;

C++14
C++14

C++14 对 C++11 的修正与增强版本,适合旧系统维护和较老工具链兼容。

下载
  • 必须用初始化列表写法:Derived(int x) : Base(x) { }
  • 如果基类构造函数是 explicit 的,这里也必须显式调用,不能靠隐式转换
  • 多个基类参数要按声明顺序传递,顺序错会导致编译错误或静默行为异常
class Base {
public:
    Base(int a, const std::string& s) : val(a), name(s) {}
private:
    int val;
    std::string name;
};

class Derived : public Base {
public:
    Derived(int x, const std::string& n) : Base(x, n) {} // 必须这样
};

多继承出现二义性?用作用域解析或虚继承破局

两个基类都有同名函数或成员,派生类直接调用会报 error: request for member 'xxx' is ambiguous。这不是设计缺陷,是语言强制你明确意图。

性能影响:虚继承会带来额外指针开销和间接寻址,仅在需要共享同一份基类子对象时才用;普通多继承无额外成本。

  • 临时解决:用 Base1::func() 或 Base2::func() 显式指定
  • 根本解决:如果两个基类本应共享一个基类实例(比如都继承自 Interface),就把继承改成 virtual public Interface
  • 注意:虚继承后,最派生类负责构造虚基类,中间继承者不能调用其构造函数

派生类重写函数不生效?确认是否加了 virtual 和 override

没加 virtual 的基类函数,派生类里同签名函数只是隐藏(hiding),不是重写(overriding)。通过基类指针调用,永远执行基类版本。

容易踩的坑:只在派生类加 override,但基类忘了加 virtual,编译器会直接报错,而不是静默忽略。

  • 基类函数必须声明为 virtual,派生类对应函数加上 override 是强推荐做法
  • 参数类型、const 限定、引用/值语义必须完全一致,否则仍是隐藏,不是重写
  • 返回类型协变只允许指针/引用类型变为其派生类,基础类型(如 int)不能改
虚继承的初始化顺序、多继承下的内存布局、以及 final 关键字对重写的限制,这些点一旦混用就容易出定位困难的问题。实际写的时候,宁可多写一行 Base::func(),也别依赖编译器猜测你的意图。

相关文章

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

c++

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

超级麦吉

一款通过数字员工协作完成调研、数据分析与文档制作的AI办公平台。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1069

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3540

2023.10.25

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

2458

2023.09.20

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

7539

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3585

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

4728

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

3145

2025.08.29

C++ 智能指针与现代内存管理
C++ 智能指针与现代内存管理

深入讲解 C++ 现代内存管理的核心工具——智能指针,涵盖 unique_ptr 独占所有权语义、shared_ptr 引用计数机制与循环引用问题、weak_ptr 弱引用的应用场景、make_unique/make_shared 工厂函数的性能优势、自定义删除器的编写、RAII 资源管理思想的实践,以及从裸指针迁移到智能指针的重构策略,帮助开发者编写安全无泄漏的现代 C++ 代码。

399

2026.04.23

Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

40

2026.11.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++ Core Guidelines
C++ Core Guidelines

共0课时 | 0人学习

C++ Reference
C++ Reference

共0课时 | 0人学习

C++ 官方标准说明
C++ 官方标准说明

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn