<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>构造函数 on wuqq 的 Blog</title><link>http://wuqq547.top/tags/%E6%9E%84%E9%80%A0%E5%87%BD%E6%95%B0/</link><description>Recent content in 构造函数 on wuqq 的 Blog</description><image><title>wuqq 的 Blog</title><url>http://wuqq547.top/cover.png</url><link>http://wuqq547.top/cover.png</link></image><generator>Hugo -- 0.147.4</generator><language>zh-cn</language><lastBuildDate>Mon, 13 Apr 2026 09:55:00 +0800</lastBuildDate><atom:link href="http://wuqq547.top/tags/%E6%9E%84%E9%80%A0%E5%87%BD%E6%95%B0/index.xml" rel="self" type="application/rss+xml"/><item><title>0032 - 《21天学通C++（第8版）》第九章 100 道选择题：类与对象强化训练</title><link>http://wuqq547.top/posts/0032-cpp-chapter9-100-mcq-notes/</link><pubDate>Mon, 13 Apr 2026 09:55:00 +0800</pubDate><guid>http://wuqq547.top/posts/0032-cpp-chapter9-100-mcq-notes/</guid><description>&lt;h2 id="一说明">一、说明&lt;/h2>
&lt;p>这篇笔记基于《21天学通 C++（第8版）》第九章“类和对象”的核心内容整理而成，但题目、解析和拓展说明均为重新组织后的训练材料。&lt;/p>
&lt;p>使用方式建议如下：&lt;/p>
&lt;ul>
&lt;li>先独立做题&lt;/li>
&lt;li>每题立刻对答案&lt;/li>
&lt;li>重点看解析中的判断逻辑&lt;/li>
&lt;li>再用“知识点拓展”补全关联概念&lt;/li>
&lt;/ul>
&lt;p>这一套题做完，基本就能把第九章最核心的对象模型、构造析构、复制语义和访问控制理顺。&lt;/p>
&lt;hr>
&lt;h2 id="二类与对象基础题1-20">二、类与对象基础题（1-20）&lt;/h2>
&lt;h3 id="题-1">题 1&lt;/h3>
&lt;p>&lt;strong>题目：&lt;/strong> 下面哪一项最准确地描述了 C++ 中的类？&lt;/p>
&lt;p>A. 一个已经存在于内存中的具体对象&lt;br>
B. 一种定义数据和行为的自定义类型&lt;br>
C. 一种只能保存整数的数据结构&lt;br>
D. 一种专门替代函数的语法&lt;/p>
&lt;p>&lt;strong>正确答案：&lt;/strong> B&lt;/p>
&lt;p>&lt;strong>解析：&lt;/strong> 类本质上是程序员定义的数据类型，它把数据成员和成员函数组织在一起。&lt;/p>
&lt;p>&lt;strong>知识点拓展：&lt;/strong> 类是蓝图，对象才是运行时真正存在的实例。&lt;/p>
&lt;h3 id="题-2">题 2&lt;/h3>
&lt;p>&lt;strong>题目：&lt;/strong> 对象与类的关系，最合适的理解是：&lt;/p>
&lt;p>A. 对象是类的关键字&lt;br>
B. 类是对象的数组&lt;br>
C. 对象是类在运行时的实例&lt;br>
D. 类和对象完全没有区别&lt;/p>
&lt;p>&lt;strong>正确答案：&lt;/strong> C&lt;/p>
&lt;p>&lt;strong>解析：&lt;/strong> 类负责定义结构，对象是根据这种定义创建出来的具体实体。&lt;/p>
&lt;p>&lt;strong>知识点拓展：&lt;/strong> “实例化”就是从类生成对象的过程。&lt;/p>
&lt;h3 id="题-3">题 3&lt;/h3>
&lt;p>&lt;strong>题目：&lt;/strong> 仅仅声明一个类本身，会直接带来什么结果？&lt;/p>
&lt;p>A. 自动创建很多对象&lt;br>
B. 直接执行类中的成员函数&lt;br>
C. 告诉编译器这种类型的结构&lt;br>
D. 自动在堆中分配内存&lt;/p>
&lt;p>&lt;strong>正确答案：&lt;/strong> C&lt;/p>
&lt;p>&lt;strong>解析：&lt;/strong> 类声明主要是类型定义，不会自动执行，也不会自动创建对象。&lt;/p>
&lt;p>&lt;strong>知识点拓展：&lt;/strong> 真正占用对象内存的是对象实例，而不是类声明本身。&lt;/p>
&lt;h3 id="题-4">题 4&lt;/h3>
&lt;p>&lt;strong>题目：&lt;/strong> 类把数据和操作数据的函数组织在一起，这种思想最接近：&lt;/p>
&lt;p>A. 封装&lt;br>
B. 宏替换&lt;br>
C. 强制类型转换&lt;br>
D. 递归&lt;/p></description></item><item><title>0031 - 《21天学通C++（第8版）》第九章笔记：类、对象与构造复制语义</title><link>http://wuqq547.top/posts/0031-cpp-classes-and-objects-chapter9-notes/</link><pubDate>Mon, 13 Apr 2026 09:20:00 +0800</pubDate><guid>http://wuqq547.top/posts/0031-cpp-classes-and-objects-chapter9-notes/</guid><description>&lt;h2 id="一这一章在讲什么">一、这一章在讲什么&lt;/h2>
&lt;p>第九章的主题是：&lt;strong>类和对象&lt;/strong>。&lt;/p>
&lt;p>如果说前面几章主要是在练 C++ 的基本语法，那么这一章开始真正进入面向对象编程的核心区域。它回答的是下面这些问题：&lt;/p>
&lt;ul>
&lt;li>类到底是什么，和对象是什么关系&lt;/li>
&lt;li>为什么成员变量和成员函数要被放进同一个“壳”里&lt;/li>
&lt;li>&lt;code>public&lt;/code> 和 &lt;code>private&lt;/code> 到底在保护什么&lt;/li>
&lt;li>构造函数、析构函数为什么重要&lt;/li>
&lt;li>为什么带原始指针的类会遇到“浅复制”问题&lt;/li>
&lt;li>复制构造函数和移动构造函数分别解决什么问题&lt;/li>
&lt;li>&lt;code>this&lt;/code>、&lt;code>friend&lt;/code>、&lt;code>struct&lt;/code>、&lt;code>union&lt;/code>、聚合初始化分别扮演什么角色&lt;/li>
&lt;/ul>
&lt;p>这一章真正训练的，不只是“会写 class”，而是开始建立一种更接近工程代码的思维：&lt;strong>对象如何诞生、如何被访问、如何被复制、如何被销毁&lt;/strong>。&lt;/p>
&lt;hr>
&lt;h2 id="二类和对象的关系">二、类和对象的关系&lt;/h2>
&lt;h3 id="21-类是蓝图对象是实例">2.1 类是蓝图，对象是实例&lt;/h3>
&lt;p>类可以理解成一种“模板”或“蓝图”，它描述一种事物应该具备哪些数据和哪些行为。&lt;/p>
&lt;p>例如书里用 &lt;code>Human&lt;/code> 来模拟一个人：&lt;/p>
&lt;ul>
&lt;li>数据：姓名、年龄、出生地&lt;/li>
&lt;li>行为：说话、自我介绍&lt;/li>
&lt;/ul>
&lt;p>类本身只是定义，不会自动运行。真正进入程序运行阶段的是&lt;strong>对象&lt;/strong>。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-cpp" data-lang="cpp">&lt;span style="display:flex;">&lt;span>Human firstMan;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这里 &lt;code>firstMan&lt;/code> 才是对象，也叫这个类的一个实例。&lt;/p>
&lt;h3 id="22-类把数据和操作数据的函数放在一起">2.2 类把“数据”和“操作数据的函数”放在一起&lt;/h3>
&lt;p>这是类最重要的意义之一。&lt;/p>
&lt;p>过去用过程式写法时，数据和函数很容易分散；而类强调把：&lt;/p>
&lt;ul>
&lt;li>成员数据&lt;/li>
&lt;li>成员函数&lt;/li>
&lt;/ul>
&lt;p>放进同一个逻辑单元里。&lt;/p>
&lt;p>这就是封装的起点。&lt;/p>
&lt;h3 id="23-对象既可以在栈上创建也可以在堆上创建">2.3 对象既可以在栈上创建，也可以在堆上创建&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-cpp" data-lang="cpp">&lt;span style="display:flex;">&lt;span>Human firstMan;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Human&lt;span style="color:#f92672">*&lt;/span> firstWoman &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#66d9ef">new&lt;/span> Human();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">delete&lt;/span> firstWoman;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>第一种是普通局部对象，通常放在栈上；第二种是动态分配的对象，通过指针持有。&lt;/p>
&lt;p>这一点会直接影响后面成员访问方式和生命周期管理方式。&lt;/p>
&lt;hr>
&lt;h2 id="三成员访问-和--">三、成员访问：&lt;code>.&lt;/code> 和 &lt;code>-&amp;gt;&lt;/code>&lt;/h2>
&lt;h3 id="31-句点运算符访问普通对象成员">3.1 句点运算符访问普通对象成员&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-cpp" data-lang="cpp">&lt;span style="display:flex;">&lt;span>Human firstMan;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>firstMan.age &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">30&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>firstMan.IntroduceSelf();
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果你手里拿的是对象本身，就使用 &lt;code>.&lt;/code>。&lt;/p>
&lt;h3 id="32-指针运算符访问对象指针成员">3.2 指针运算符访问对象指针成员&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-cpp" data-lang="cpp">&lt;span style="display:flex;">&lt;span>Human&lt;span style="color:#f92672">*&lt;/span> firstWoman &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#66d9ef">new&lt;/span> Human();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>firstWoman&lt;span style="color:#f92672">-&amp;gt;&lt;/span>age &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">28&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>firstWoman&lt;span style="color:#f92672">-&amp;gt;&lt;/span>IntroduceSelf();
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果你手里拿的是“指向对象的指针”，就使用 &lt;code>-&amp;gt;&lt;/code>。&lt;/p></description></item></channel></rss>