最基础的c++继承结构需一个基类和一个派生类,用class derived : public base声明;必须显式写public,否则默认私有继承导致无法访问父类public成员;基类带参构造函数需在派生类初始化列表中显式调用。

怎么写一个最基础的 C++ 继承结构
最简继承只需要两个类:一个基类(父类)、一个派生类(子类),用 : 加访问说明符声明继承关系即可。不需要虚函数、不涉及多态,就是纯粹的“子类能直接用父类的 public 成员”。
常见错误是漏写访问说明符(比如写成 class Dog : Animal 而不是 class Dog : public Animal),这时默认是 private 继承,子类对象无法访问父类成员,编译会报错或行为不符合预期。
-
public继承最常用,保持父类public成员在子类中仍是public - 基类构造函数不会自动调用,若基类有带参构造函数,子类必须在初始化列表里显式调用:
Dog() : Animal("dog") {} - 子类定义同名函数会隐藏(不是重载也不是覆盖)父类所有同名函数,哪怕参数不同
一个能直接编译运行的最小完整例子
下面这段代码在 g++/clang/msvc 上都能通过,没有依赖,只用标准头文件:
#include <iostream>
using namespace std;
class Animal {
public:
string name;
Animal(string n) : name(n) {}
void speak() { cout
<p>注意:如果把 <code>public Animal</code> 改成 <code>Animal</code>(即省略访问说明符),<code>d.speak()</code> 就会编译失败,因为 <code>Dog</code> 私有继承了 <code>Animal</code>,<code>speak()</code> 在 <code>Dog</code> 作用域里变成 <code>private</code>。</p><div class="aritcle_card flexRow artxards">
<div class="artcardd flexRow">
<a class="aritcle_card_img" rel="nofollow" href="/xiazai/gongju/2823" title="C++14"><img
src="https://img.php.cn/upload/manual/001/431/639/6ac8b33c327c4749.png" alt="C++14" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a rel="nofollow" href="/xiazai/gongju/2823" title="C++14" class="overflowclass">C++14</a>
<p class="overflowclass">C++14 对 C++11 的修正与增强版本,适合旧系统维护和较老工具链兼容。</p>
</div>
<a rel="nofollow" href="/xiazai/gongju/2823" title="C++14" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div>
<h3>为什么不能只写 <code>class Dog : Animal</code>
</h3>
<p>这是新手高频踩坑点。C++ 规定:类继承时若不写访问说明符,<code>class</code> 默认是 <code>private</code>,而 <code>struct</code> 默认是 <code>public</code>。所以:</p>
<ul>
<li>
<code>class Dog : Animal</code> 等价于 <code>class Dog : private Animal</code>
</li>
<li>
<code>struct Dog : Animal</code> 等价于 <code>struct Dog : public Animal</code>
</li>
</ul>
<p>但别为了省字符改用 <code>struct</code> —— 语义上 <code>class</code> 更适合表达“具有行为的类型”,且团队代码风格通常统一用 <code>class</code>,显式写 <code>public</code> 更安全、更可读。</p>
<h3>继承后要注意的隐性限制</h3>
<p>即使是最简单的继承,也有几个容易被忽略的约束:</p>
<ul>
<li>基类析构函数如果不是 <code>virtual</code>,用基类指针 delete 派生类对象会导致未定义行为(虽然这个例子没涉及,但一旦开始用指针就会撞上)</li>
<li>派生类不能访问基类的 <code>private</code> 成员,哪怕在类内也不行;想让子类访问,得用 <code>protected</code>
</li>
<li>
<code>static</code> 成员变量和函数继承时不受访问说明符影响,但调用仍受其自身声明的访问控制限制</li>
</ul>
<p>真正写业务代码时,“最简单”的继承往往只是起点,后面很快要面对构造顺序、赋值兼容性、切片问题——这些都不是语法写错,而是模型理解偏差导致的运行时问题。</p></iostream>C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!










