小学生学C++编程语法知识(如果想将某个类用作基类,为什么该类必须定义而并非声明)
如果想将某个类用作基类为什么该类必须定义而并非声明对小学生来说可以把它理解成继承就像“盖房子”建新房子之前必须知道老房子的完整结构而不能只知道一个名字。下面我们一步一步讲。一、先认识两个概念声明 vs 定义在 C 中1. 声明Declaration声明只是告诉编译器“有这么一个东西存在。”例如class Animal;这句话叫类的前向声明forward declaration意思“以后会有一个叫 Animal 的类。”但是编译器不知道Animal 有几个成员变量Animal 有哪些函数Animal 占多少内存它只知道有这么一个名字。2. 定义Definition定义就是完整写出类class Animal { public: int age; void eat() { cout 吃东西; } };现在编译器知道Animal有一个 int 类型的 age有一个 eat 函数大小是多少如何创建对象二、什么叫“作为基类”例如class Dog : public Animal { };意思Dog 继承 Animal。可以理解Animal | | DogDog 是 Animal 的孩子。三、为什么基类必须定义因为创建 Dog 的时候Dog 身体里面包含 Animal 的部分。例如class Animal { public: int age; }; class Dog : public Animal { };实际上Dog对象 ---------------- | Animal部分 | | | | age | ---------------- | Dog自己的部分 | ----------------Dog 天生带有 Animal。所以编译器必须知道Animal 到底有多大四、如果只有声明会发生什么例如class Animal; // 只有声明 class Dog : public Animal { };编译器看到Dog继承Animal它会问“Animal是什么样”可是它只知道Animal这个名字存在不知道Animal里面有什么所以无法计算Dog对象占多少空间例如Dog dog;编译器需要分配多少字节但是Animal??? 大小未知所以错误。五、用盖房子的故事理解假设爸爸 Animal 要给孩子 Dog 留房间。爸爸房间---------------- | 爸爸的房间 | | 10平方米 | ----------------孩子Dog 爸爸房间 自己房间那么建 Dog 房子之前必须知道爸爸房间多大。如果只听说“有一个爸爸。”但是不知道爸爸房间多大有几个房间怎么建所以继承必须知道基类完整结构。六、为什么普通指针可以只声明这里容易混淆。例如class Animal; Animal* p;可以。为什么因为指针大小固定。比如64位系统指针 8字节编译器只需要知道“这是一个地址。”不需要知道 Animal 有多大。但是class Dog : public Animal { };不行。因为Dog包含Animal。必须知道Animal大小七、一个经典对比情况1指向对象可以class Student; Student* p;因为只需要保存地址。情况2继承不可以class Student; class GoodStudent : public Student { };因为GoodStudent需要包含Student。八、还有一个重要原因虚函数表如果基类有虚函数class Animal { public: virtual void speak(); };那么对象里面还有虚函数表指针 vptr例如Animal对象 ------------- | vptr | ------------- | 成员变量 | -------------派生类Dog对象 ------------- | Animal部分 | | vptr | ------------- | Dog部分 | -------------如果不知道 Animal 定义连有没有虚函数有没有vptr内存布局都不知道。所以更加不能继承。九、总结成一句小学生能记住的话为什么基类必须定义因为派生类像是在基类身体上继续添加东西编译器必须先知道基类完整长什么样才能计算派生类的大小和布局。口诀声明 知道名字不知道身体 定义 知道身体知道大小 指针 只需要知道名字 继承 必须知道身体十、和前面“虚析构函数”的知识联系起来以后学习class Base { public: virtual ~Base() { } }; class Derived : public Base { };这里Derived继承Base。编译器必须知道Base完整定义。因为Derived对象里面包含Base部分。所以继承关系比指针关系要求更多的信息。这也是为什么class Base; Base* p; // 可以 class Derived : public Base { }; // 不可以这是 C 面向对象中非常核心的规则。

相关新闻

如何用5分钟完成Windows和Office永久激活:KMS智能激活终极指南

如何用5分钟完成Windows和Office永久激活:KMS智能激活终极指南

如何用5分钟完成Windows和Office永久激活:KMS智能激活终极指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统激活弹窗烦恼吗?或者Office软件功能受限…

2026/8/9 12:15:38 阅读更多 →
408数据结构第5章:二叉树遍历序列题——技巧、判断与真题型总结

408数据结构第5章:二叉树遍历序列题——技巧、判断与真题型总结

适用:考研408数据结构 章节:第5章 树与二叉树 重点题型:已知两种遍历,求第三种遍历判断一棵二叉树能否唯一确定已知前序和后序,判断中序可能/不可能判断“前序与后序互逆”时二叉树的结构性质一、先把三种遍历顺序记死…

2026/8/9 12:15:38 阅读更多 →
基于Arcemu的C++网络编程实战:从MMORPG服务器架构到高并发系统设计

基于Arcemu的C++网络编程实战:从MMORPG服务器架构到高并发系统设计

1. 项目概述:为什么选择Arcemu作为网络编程的实战沙盒?如果你对C网络编程和大型分布式系统架构感兴趣,但又苦于没有足够复杂和有趣的实战项目,那么基于Arcemu搭建一个《魔兽世界》私服模拟器,绝对是一个能让你从“Hell…

2026/8/9 12:15:38 阅读更多 →

最新新闻

如何快速配置Windows风扇控制软件:免费系统散热优化完全指南

如何快速配置Windows风扇控制软件:免费系统散热优化完全指南

如何快速配置Windows风扇控制软件:免费系统散热优化完全指南 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trend…

2026/8/9 15:07:10 阅读更多 →
Unity三消游戏开发:从匹配算法到对象池优化的完整实现

Unity三消游戏开发:从匹配算法到对象池优化的完整实现

1. 项目概述:从“糖果传奇”到你的专属三消游戏 如果你是一名Unity开发者,或者正想踏入游戏开发的大门,那么“三消游戏”绝对是一个绕不开的经典品类。从风靡全球的《Candy Crush Saga》到无数休闲手游,其简单易上手的玩法背后&am…

2026/8/9 15:07:10 阅读更多 →
嵌入式入门之点灯

嵌入式入门之点灯

一 博主使用的是板子是STM32F4xx系列的F407ZG的开发板,实物图如下二 点灯基础知识:要想点亮一个LED灯需要先查询开发板原理图,如下图从图中可知LED左边是3.3V所以右边应该是控制不同的电压来控制led的亮灭,二极管的特性是单向流通,且两边电压不同才会发光,所以我们只需要控制右…

2026/8/9 15:07:10 阅读更多 →
从斐波那契到泰波那契:动态规划算法详解与C++实现

从斐波那契到泰波那契:动态规划算法详解与C++实现

1. 项目概述:从斐波那契到泰波那契 如果你写过C,大概率绕不开“斐波那契数列”这道经典的入门题。它就像编程世界的“Hello World”一样,是检验递归、迭代乃至动态规划思想的绝佳试金石。但今天我们要聊的,是它的一个“威力加强版…

2026/8/9 15:07:10 阅读更多 →
Unity轻量级IK方案:基于CCD算法的简易实现与工程实践

Unity轻量级IK方案:基于CCD算法的简易实现与工程实践

1. 项目概述:为什么我们需要一个“简化”的IK方案? 在Unity里折腾过角色动画的朋友,对“反向运动学”(Inverse Kinematics,简称IK)这个词一定不陌生。无论是让角色自然地抓取一个位置飘忽的物体&#xff0c…

2026/8/9 15:07:10 阅读更多 →
文生图开源大模型

文生图开源大模型

一、国产开源(中文强、可商用优先)1. Qwen‑Image(阿里通义千问)版本:v1 /v1.5 (2512) 完全开源;v2.0 只开放 API、权重未开源协议:Apache 2.0 ✅ 可商用特点:中文理解 / 中文文字渲…

2026/8/9 15:06:09 阅读更多 →

日新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/9 0:01:47 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/9 0:01:47 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/9 0:03:48 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/9 0:01:47 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/9 0:01:47 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/9 0:03:48 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/8 17:02:44 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/9 0:45:04 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/8 17:02:44 阅读更多 →