c++在定义完变量类变量后,再通过类成员调用构造函数调用成员函数不可以吗?为什么?求高手解答

&>&&>&&>&&>&全方位学习C++
全方位学习C++
上传大小:67.61MB
《从新手到高手C++全方位学习》总结了十几本C++图书及教材的优点,摈弃了它们语言拖沓、层次结构混乱等缺陷,从零开始、由浅入深、层层递进、细致而又详尽地讲解C++这门大型编程语言。《从新手到高手C++全方位学习》知识系统全面,拥有字典般的容量,可随用随查,涵盖指针、面向对象、操作符重载、流、命名空问、模板、异常处理、宏等主流C++开发技术。为了使读者能够活学活用,《从新手到高手C++全方位学习》针对重要的概念精心设计了438个实用范例,囊括大量经验和技巧,即使已从事C++工作多年的朋友,也能从中汲取新的养料。《从新手到高手C++全方位学习》适合于从未学习过任何编程语言的新手,以及学习C++多年,仍旧不能融会贯通的读者,对于正在使用C++进行开发的程序员也有很好的参考价值。
第1章 初识C++
1.1 C++简介
1.2 C++与C的区别
1.3 学习C++之前需要先学C吗
1.4 C++与其他语言的区别
1.5 C++的版本以及安装问题
第2章 做一个最简短的C++程序
2.1 简单的屏幕输出小程序
2.2 输出语句的使用
2.3 std::介绍
2.4 iostream与iostream.h的区别
2.5 重名问题
第3章 初步了解函数
3.1 一个简单的函数
3.2 函数的传参
3.3 函数的返回值. 参数与变量
3.4 函数的声明与定义
3.5 局部变量
3.6 全局变量
第4章 C++数据类型
4.1 变量的定义
4.2 将变量及数据存储在内存中
4.3 布尔型变量
4.4 字符型变量
4.5 wchar_t双字节型变量
4.6 整型概述
4.7 整型变量的定义
4.8 浮点型变量
4.10 枚举型常量
第5章 if语句与逻辑运算符
5.1 语句的定义
5.2 块的定义
5.3 表达式的定义
5.4 运算符的定义
5.4.1 赋值运算符的定义
5.4.2 数学运算符的定义
5.4.3 赋值运算符与数学运算符的联合
5.5 自加与自减
5.5.1 前置
5.5.2 后置
5.6 表达式的优先级
5.7 关系运算符
5.8 if语句
5.8.1 else语句
5.8.2 else if语句
5.8.3 if语句的嵌套
5.9 逻辑运算符及其使用
5.9.1 逻辑“与”
5.9.2 逻辑“或”
5.9.3 逻辑“非”
5.9.4 逻辑运算符的优先级
5.9.5 运算式的真假关系
5.10 三目运算符
5.10.1 三目运算符的优先问题
5.10.2 三目运算符的使用问题
5.10.3 三目运算符的型别问题
5.10.4 三目运算符在字符型变量中的使用
5.11 复杂嵌套的if语句
第6章 面向对象
6.1 面向对象程序语言的主要特征
6.2 类. 对象和成员
6.3 类. 对象和成员的使用方法及区别
6.3.1 声明一个类
6.3.2 命名习惯
6.3.3 定义一个对象
6.3.4 类与对象的区别
6.3.5 对象与成员的关系
6.3.6 不要给类赋值
6.3.7 对象只能调用类中存在的成员
6.6 成员函数的声明和定义
6.7 为什么将成员函数的声明和定义分开
6.7.1 普通内联函数
6.7.2 成员内联函数
6.8 将类声明和定义部分保存在头文件中
6.9 const成员函数
6.10 构造函数
6.11 默认构造函数
6.12 析构函数
6.13 析构对象数组
第7章 循环语句
7.1 循环语句的前身——goto语句
7.2 慎用goto语句
7.3 while语句
7.3.1 带运算符的while语句
7.3.2 以字符为条件的while语句
7.3.3 限定while循环的次数
7.3.4 continue语句
7.3.5 break语句
7.3.6 永不休止的while循环
7.4 do… while循环
7.5 for循环
7.5.1 灵活的for循环
7.5.2 条件为空的for循环
7.5.3 执行为空的for循环
7.5.4 嵌套的for循环
7.6 switch语句
7.6.1 switch语句常见错误
7.6.2 switch的菜单功能
第8章 指针
8.1 什么是地址
8.2 用指针来保存地址
8.2.1 空指针
8.2.2 指针与变量类型
8.2.3 用指针来访问值
8.2.4 指针地址. 指针保存的地址和该地址的值
8.2.5 指针对数值的操作
8.2.6 更换指针保存的地址
8.3 为什么使用指针
8.3.1 栈和堆
8.3.2 用指针创建堆中空间
8.3.3 用指针删除堆中空间
8.4 动态内存
8.4.1 内存泄漏
8.4.2 在堆中创建对象
8.4.3 在堆中删除对象
8.4.4 访问堆中的数据成员
8.4.5 在构造函数中开辟内存空间
8.4.6 对象在栈与堆中的不同
8.5 this指针
8.6 指针的常见错误
8.7 指针运算
8.7.1 指针的加减运算
8.7.2 指针的赋值运算
8.7.3 指针的相减运算
8.7.4 指针的比较运算
8.8.1 常量指针
8.8.2 指向常量的指针
8.8.3 指向常量的常指针
第9章 引用
9.1 什么是引用
9.1.1 引用的地址
9.1.2 引用就是别名常量
9.1.3 引用对象
9.1.4 空引用
9.2 函数的参数传递
9.2.1 通过值来传递函数参数
9.2.2 通过指针来传递函数参数
9.2.3 通过引用来传递函数参数
9.2.4 让函数返回多个值
9.3 传递对象
9.3.1 用值来传递对象
9.3.2 使用指针来传递对象
9.3.3 使用const指针来传递对象
9.3.4 使用引用来传递对象
9.3.5 到底是使用引用还是指针
9.3.6 引用和指针可以一块用
9.4 引用应注意的问题
9.4.1 引用容易犯的错误
9.4.2 引用一个按值返回的堆中对象
9.4.3 引用一个按别名返回的堆中对象
9.4.4 在哪里创建,就在哪里释放
第10章 深入函数
10.1 函数重载
10.1.1 普通函数的重载
10.1.2 成员函数的重载
10.2 函数的默认参数
10.3 重载构造函数
10.3.1 成员变量的初始化
10.3.2 成员变量的初始化与构造函数
10.3.3 复制构造函数
10.3.4 构造函数和new运算符
10.3.5 再谈默认构造函数
10.4 析构函数和delete运算符
10.4.1 默认析构函数
10.4.2 调用构造函数进行类型转换
10.5 浅层复制构造函数
10.6 深层复制构造函数
第11章 运算符重载
11.1 运算符重载
11.2 在成员函数中实现自加
11.3 重载前置自加运算符
11.4 创建临时对象
11.5 创建无名临时对象
11.6 取消创建临时对象
11.7 重载后置自加运算符
11.8 重载加法运算函数operator+
11.9 重载赋值运算函数operator=
11.10 转换类型运算符
11.10.1 温习调用构造函数实现的类型转换
11.10.2 通过构造函数将变量转换为一个对象的成员变量
11.10.3 通过operator关键字进行转换
11.11 什么可以被重载,什么不可以
第12章 继承
12.1 什么是继承和派生
12.1.1 复杂的继承和派生
12.1.2 继承和派生如何在C++中实现
12.1.3 继承的种类及语法
12.1.4 单一继承
12.2 公有型. 保护型和私有型
12.3 访问权限
12.4 多重继承
12.5 继承的构造与析构
12.6 向基类构造函数传递参数
12.7 继承和重载的两义性问题
12.7.1 多重继承容易产生两义性
12.7.2 两义性在重载时的一些问题
12.7.3 两义性的归属问题
12.7.4 减少两义性产生的混淆问题
12.7.5 虚基类不会产生两义性
第13章 虚函数
13.1 指向对象的指针
13.2 虚函数
13.3 拳击游戏
13.4 继承是否可以实现多态性
13.5 在编译时的静态联编
13.6 在运行时的静态联编
13.7 在编译时的动态联编
13.8 在运行时的动态联编
13.9 调用虚函数
13.9.1 在虚函数中调用成员函数
13.9.2 三种调用虚函数的方式比较
13.10 被继承的虚函数仍然是虚函数
13.11 系统是如何调用虚函数的
13.12 在虚函数中使用成员名限定
13.13 虚析构函数
第14章 数组
14.1 数组的基本用法
14.1.1 什么是数组
14.1.2 数组元素
14.1.3 数组下标越界
14.1.4 倒序输出
14.1.5 将数组的下标定义为常量
14.1.6 手动操作数组元素
14.1.7 数组的初始化
14.2 数组的用途
14.2.1 求平均考试成绩
14.2.2 兔子繁殖问题
14.2.3 数字排序问题
14.3 数组在内存中的分布
14.4 输出数组名
14.5 数组名与函数
14.6 传递与接收
14.7 数组与函数
14.7.1 函数传参实例一——求数组所有元素的和
14.7.2 函数传参实例二——用递增法查找数据
14.7.3 函数传参实例三——用二分法查找数据
14.7.4 函数传参实例四——判断数组是否按照顺序排列
14.7.5 函数传参实例五——判断数组排列方式后执行不同的函数
14.8 数组在对象中的传参
14.9 数组对象
14.10 在数组对象中初始化成员变量
14.11 指针数组
14.12 枚举常量与数组..
14.13 多维数组
14.14 多维数组的初始化
14.15 字符数组
14.16 重载数组下标操作符
第15章 链表
15.1 声明链表结构
15.2 简单的图书链表
15.2.1 图书链表
15.2.2 类的链表
15.3 动态链表
15.3.1 动态链表的建立
15.3.2 解决输入字符造成死循环的问题
15.3.3 动态链表的显示
15.3.4 动态链表的删除
15.3.5 动态链表的插入
15.3.6 链表统计
15.3.7 使用链表
15.4 完整的动态链表清单
15.5 链表使用案例——走迷宫
15.5.1 创建Windows应用程序项目
15.5.2 创建窗口
15.5.3 加载图片
15.5.4 句柄是什么
15.5.5 显示图片
15.5.6 动画
15.5.7 键盘控制人物移动
15.5.8 迷宫墙壁
15.5.9 走迷宫
15.5.10 用链表记录行走路线
第16章 多态性
16.1 为什么要使用多重继承
16.2 在派生类中增加函数
16.3 使用多重继承
16.4 多重继承中初始化构造函数的参数
16.5 多个子基类共享一个父基类
16.6 虚基类
16.7 慎用多重继承
16.8 空的虚函数
16.9 抽象类和纯虚函数
16.10 纯虚函数
16.11 复杂的抽象结构
第17章 类的特殊成员
17.1 静态成员变量
17.2 私有静态成员变量
17.3 静态成员函数
17.4 静态成员的使用
17.5 函数指针
17.6 函数指针数组
17.7 函数指针也可以作为函数的参数
17.8 使用typedef简化函数指针的声明及定义
17.9 类的函数指针
17.10 成员函数指针数组
第18章 字符串
18.1 char型字符串
18.2 string型字符串
18.2.1 string型字符串的赋值
18.2.2 string型字符串的合并
18.2.3 string型字符串的部分合并
18.2.4 string型字符串的替换
18.2.5 string型字符串的复制
18.2.6 string型字符串的插入
18.2.7 string型字符串的删除
18.2.8 string型字符串的查找
18.2.9 string型字符串的比较
18.2.10 判断string型字符串是否为空
18.3 字符串的使用
18.3.1 swap() 交换两个字符串的内容
18.3.2 将string型字符串转为char型字符串
18.3.3 char型字符串与函数
18.3.4 函数如何返回字符串
18.4 结构体
18.4.1 结构体的赋值
18.4.2 结构体与函数
18.4.3 结构体与string
18.5 string数组与函数
18.6 流的使用
18.6.1 重载输出运算符&&
18.6.2 友元的方式重载输出运算符
18.6.3 重载自加运算符的执行次序
18.6.4 重载输入运算符&&
18.7 编写一个String类
18.7.1 创建String类
18.7.2 创建可自动调节大小的String类字符串对象
18.7.3 限制数组越界
18.7.4 用复制构造函数实现字符串的赋值功能
18.7.5 用重载赋值运算符函数实现真正的字符串赋值功能
18.7.6 用重载输出运算符operator&&()函数实现字符串的输出
18.7.7 用重载输入运算符operator&&()函数实现字符串的输入
18.7.8 用重载比较运算符实现字符串的比较
18.7.9 为String类添加字符串的相加功能
18.7.10 为String类添加字符串的+=功能
18.7.11 完成后的String类
第19章 代码重用
19.2 将String类作为包含类
19.3 为book类重载执行相加运算的成员函数
19.4 包含对系统造成的消耗
19.5 按别名传递book对象
19.6 包含指向另一个类的指针
19.6.1 数据类Date
19.6.2 链表类Node
19.6.3 标签类linkelist
19.6.4 头节点类HeadNode
19.6.5 尾节点TailNode类
19.6.6 中间节点InterNode类
19.6.7 InterNode类的构造函数
19.6.8 InterNode类的插入函数
19.6.9 全部程序
19.7 将头节点. 中间节点和尾节点合并为一个节点
19.7.1 数据类Date
19.7.2 由Date类派生的图书类Book
19.7.3 由Date类派生的药品类medica
19.7.4 创建一个节点类Node
19.7.5 用来操作节点类Node的list类
19.7.6 list类的getfirst()方法
19.7.7 list类的operator[]方法
19.7.8 list类的repeat()方法
19.7.9 list类的insert()方法
19.7.10 list类的find()方法
19.7.11 重写的药品管理全部程序
19.8 利用类的包含来实现代码重用
19.9 私有继承
19.10 什么时候使用私有继承,什么时候使用包含
19.11 保护继承
第20章 友元类与嵌套类
20.1 友元类
20.2 嵌套类
21.1 流的操作
21.1.1 缓冲
21.1.2 流和缓冲区
21.1.3 标准输入输出对象
21.1.4 重定向
21.1.5 对象代表流
21.2 用cout输出
21.2.1 重载运算符operator&&
21.2.2 清理缓冲区
21.2.3 有关输出的相关函数
21.2.4 设置输出的字段宽度
21.2.5 设置填充字段
21.2.6 设置浮点数的显示精度
21.2.7 输出末尾的0
21.2.8 设置标志
21.2.9 setf()函数原型
21.2.10 所有15个标志以及3个指示标志
21.2.11 unset()函数
21.2.12 标准控制符
21.2.13 iomanip头文件与标准控制符
21.3 用cin输入
21.3.1 字符串的输入
21.3.2 字符串的输入问题
21.3.3 get()函数
21.3.4 带字符引用参数的get()函数
21.3.5 带2个参数的get()函数
21.3.6 带3个参数的get()函数
21.3.7 getline()函数
21.3.8 read()函数
21.3.9 gcount()函数
21.3.10 peek()函数
21.3.11 putback()函数
21.4 文件的输入和输出
21.4.1 输出数据到文件
21.4.2 读取文件中的数据
21.4.3 读取空格及空格后面的字符
21.5 多种打开文件的方式
21.6 检查文件是否打开
21.7 二进制文件和文本文件
21.7.1 以文本形式输出到文件
21.7.2 以二进制形式输出到文件
21.8 打开多个文件
21.9 命令行处理文件
21.10 使用命令行处理文件例程
21.11 指定读取文件中的数据
21.12 输出数据到文件指定位置处
21.13 seekp()和seekg()函数的结合使用
21.14 临时文件
21.15 sstream字符串输入输出流类
第22章 命名空间
22.1 什么是命名空间
22.2 创建命名空间
22.2.1 扩充命名空间的内容
22.2.2 尽量在命名空间之外定义函数
22.2.3 命名空间中的成员都是公有的
22.3 使用命名空间
22.4 使用关键字using
22.5 为你的命名空间取个别名
22.6 未命名的命名空间
22.6.1 未命名命名空间与全局变量的区别
22.6.2 未命名命名空间与static的区别
22.6.3 未命名命名空间. static与extern的区别
22.7 标准命名空间std
第23章 模板
23.1 什么是模板
23.2 重载模板
23.3 具体化函数模板
23.3.1 函数模板不能重载
23.3.2 具体化函数模板解决重载问题
23.3.3 具体化函数模板与实例化模板函数
23.4 普通函数. 函数模板与具体化函数模板的优先级
23.4.1 普通函数和函数模板的执行次序
23.4.2 函数模板与具体化函数模板的执行次序
23.4.3 具体化函数模板与普通函数的优先级
23.5 函数模板的匹配
23.6 类模板的定义
23.7 复杂类模板
23.8 数组模板
23.9 对象数组模板
23.10 具有多个参数的模板
23.11 为模板参数提供默认值
23.12 约束模板
23.13 模板成员
23.14 将模板用作参数
23.15 模板和友元
23.15.1 非模板友元类和友元函数
23.15.2 通用模板友元类和友元函数
23.15.3 特定类型模板友元函数
23.16 多余的临时对象
23.17 静态成员和模板
23.18 标准模板库
23.18.1 容器
23.18.2 顺序容器
23.18.3 关联容器
23.18.4 算法类
23.18.5 总结
第24章 异常和错误处理
24.2 设置多条catch语句
24.3 异常的派生
24.4 创建异常类的成员函数
24.5 异常类的虚函数
24.6 异常类与模板的关系
第25章 补充内容
25.1 预处理过程
25.1.1 预处理指令
25.1.2 #include指令
25.1.3 #define指令
25.1.4 用#define指令替换常量
25.1.5 用#define定义一个特定字符串并对其进行测试
25.1.6 #ifdef. #define和#endif的用途
25.1.7 带参数的#define
25.1.8 宏与内联函数
25.1.9 #运算符
25.1.10 ##运算符
25.1.11 #undef指令
25.1.12 #if指令
25.1.13 #endif指令
25.1.14 #if defined指令
25.1.15 #ifdef和#ifndef指令
25.1.16 #elif指令
25.1.17 #error指令
25.1.18 #line指令
25.1.19 #pragma 指令
25.2 预定义的宏
25.3 assert()宏
25.4 尝试编写一个简单的assert()宏
25.5 不能为0的变量
25.6 用宏函数来输出表达式的值
25.7 调试的级别
25.8 C++类型转换及运行时类型信息(RTII)
25.8.1 动态类型转换符
25.8.2 静态类型转换
25.8.3 重新解释类型转换
25.8.4 常类型转换
25.8.5 运行时类型信息
25.9 关键字volatile
25.10 关键字const
25.11 关键字mutable
25.12 联合数据类型union
25.13 联合数据类型的内存占用
25.14 匿名联合体
25.15 再谈指针
25.15.1 指针与数组
25.15.2 指针操作多维数组
25.15.3 指向多维数组的指针作为函数参数
25.15.4 字符串的指针
25.15.5 接受字符串指针的函数
25.15.6 指向字符串的指针变量与字符数组的区别
25.15.7 指向函数的指针
25.15.8 指向函数的指针的用途
25.15.9 指针数组
25.15.10 指向指针的指针
25.16 位运算
25.16.1 按位与“&”运算符
25.16.2 按位或“|”运算符
25.16.3 异或“^”运算符
25.16.4 取反“~”运算符
25.16.5 左移“&&”运算符
25.16.6 右移“&&”运算符
25.16.7 复合位运算符
25.16.8 不同长度数字的位运算
25.16.9 位运算的实例
25.17 位字段
25.18 区域差异
25.18.1 locale类
25.18.2 默认区域表示或全局区域表示
25.18.3 时间与地理设置
25.18.4 locale与time.h中时间函数的搭配使用
25.18.5 区域表示locale与流的搭配使用
25.18.6 区域表示locale与模板的搭配使用
附录A ASCII码对照表
附录B C++的关键字
附录C C++常用头文件列表...展开收缩
嵌到我的页面
<input type="text" value="">
综合评分:4.1(27位用户评分)
收藏((3))
所需积分:1
下载次数:104
审核通过送C币
创建者:qq_
创建者:ljheee
创建者:cladel
课程推荐相关知识库
上传者其他资源上传者专辑
课程资源热门标签
VIP会员动态
android服务器底层网络模块的设计方法
所需积分:0
剩余积分:720
您当前C币:0
可兑换下载积分:0
兑换下载分:
兑换失败,您当前C币不够,请先充值C币
消耗C币:0
你当前的下载分为234。
全方位学习C++
会员到期时间:
剩余下载次数:
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:C++成员变量、构造函数的初始化顺序
我的图书馆
C++成员变量、构造函数的初始化顺序
一、C++成员变量初始化1、普通的变量:一般不考虑啥效率的情况下&可以在构造函数中进行赋值。考虑一下效率的可以再构造函数的初始化列表中进行2、static&静态变量(本地化数据和代码范围):static变量属于类所有,而不属于类的对象,因此不管类被实例化了多少个对象,该变量都只有一个。在这种性质上理解,有点类似于全局变量的唯一性。函数体内static变量的作用范围时该函数体,不同于auto变量,该变量内存只被分配一次,因此其值在下次调用时维持上次的值。在模块内的static全局变量可以被模块内所有函数访问,但不能被模块外的其它函数访问。在模块内的static函数只可被这一模块内的其他函数调用,这个函数的适用范围被限制在声明它的模块内。在类中的static成员变量属于整个类所拥有,对类的所有对象只有一份拷贝。在类中的static成员函数属于整个类所拥有,这个函数不接受this指针,因而只能访问类的static成员变量。3、const&常量变量:const常量需要在声明的时候即初始化。因此需要在变量创建的时候进行初始化。一般采用在构造函数的初始化列表中进行。4、Reference&引用型变量:引用型变量和const变量类似。需要在创建的时候即进行初始化。也是在初始化列表中进行。但需要注意用Reference类型。4、字符串初始化char str[10] = "HELLO";结尾会被编译器自动加上结尾符'/0',编译的时候可以看到它最后是'',ASC码值是0;"HELLO"只有5个字符,加上编译器自动添加的'/0',也就是会初始化数组的前6个元素,剩下有元素会被全部初始化为'/0',这个要注意哦char str[] = "HELLO";编译器自动为后面的字符串分配大小并加'/0'char str[] = {'H','E','L','L','O','/0'};编译器会根据字符串大小分配空间,可是不会自动分配'/0',所以结尾的时候要自己加上'/0'char *str = "HELLO";把指向字符串的指针给定义好的字符指针1)用构造函数确保初始化对于一个空类,编译器会自动声明4个默认函数:构造函数、拷贝构造函数、赋值函数、析构函数(如果不想使用自动生成,就应该明确拒绝),这些生成的函数都是public且inline的。2)为什么构造函数不能有返回值3)为什么构造函数不能为虚函数虚函数调用的机制,是知道接口而不知道其准确对象类型的函数,但是创建一个对象,必须知道对象的准确类型;当一个构造函数被调用时,它做的首要事情之一就是初始化它的VPTR来指向VTABLE。面试题:构造函数#include &iostream&class Base&{private:public:Base(int x){i =}};class Derived : public Base{private:public:Derived(int x, int y){i =}void print(){cout && i + Base::i &&}};int main(){Derived A(2,3);A.print();return 0;}首先,是访问权限问题,子类中直接访问Base::i是不允许的,应该将父类的改为protected或者public(最好用protected)其次,统计父类和子类i的和,但是通过子类构造函数没有对父类变量进行初始化;此处编译会找不到构造函数,因为子类调用构造函数会先找父类构造函数,但是没有2个参数的,所以可以在初始化列表中调用父类构造函数最后个问题,是单参数的构造函数,可能存在隐式转换的问题,因为单参数构造函数,和拷贝构造函数形式类似,调用时很可能会发生隐式转换,应加上explicit关键字#include &iostream&class Base&{protected:public:explicit Base(int x){i =}};class Derived : public Base{private:public:Derived(int x, int y):Base(x){i =}void print(){cout && i + Base::i &&}};int main(){Derived A(2,3);A.print();return 0;}2、初始化列表1)使用初始化列表提高效率class Student&{public:Student(string in_name, int in_age){name = in_age = in_}private :};因为在构造函数中,是对name进行赋值,不是初始化,而string对象会先调用它的默认构造函数,再调用string类(貌似是basic_string类)的赋值构造函数;对于上例的age,因为int是内置类型,应该是赋值的时候获得了初值。要对成员进行初始化,而不是赋值,可以采用初始化列表(member initialization list)class Student&{public:Student(string in_name, int in_age):name(in_name),age(in_age) {}private :};在初始化的时候调用的是string的拷贝构造函数,而上例会调用两次构造函数,从性能上会有不小提升有的情况下,是必须使用初始化列表进行初始化的:const对象、引用对象2)初始化列表初始顺序#include &iostream&class Base&{public:Base(int i) : m_j(i), m_i(m_j) {}Base() : m_j(0), m_i(m_j) {}int get_i() const{return m_i;}int get_j() const{return m_j;}private:int m_i;int m_j;};int main(){Base obj(98);cout && obj.get_i() && endl && obj.get_j() &&return 0;}输出为一个随机数和98,为什么呢?因为对于初始化列表而言,对成员变量的初始化,是严格按照声明次序,而不是在初始化列表中的顺序进行初始化,如果改为赋值初始化则不会出现这个问题,当然,为了使用初始化列表,还是严格注意声明顺序吧,比如先声明数组大小,再声明数组这样。&C++构造函数初始化按下列顺序被调用:&首先,任何虚拟基类的构造函数按照它们被继承的顺序构造;其次,任何非虚拟基类的构造函数按照它们被继承的顺序构造;最后,任何成员对象的构造函数按照它们声明的顺序调用;#include &iostream&class OBJ1{public:OBJ1(){ cout&&"OBJ1\n"; }};class OBJ2{public:OBJ2(){ cout&&"OBJ2\n";}}class Base1{public:Base1(){ cout&&"Base1\n";}}class Base2{public:Base2(){ cout &&"Base2\n"; }};class Base3{public:Base3(){ cout &&"Base3\n"; }};class Base4{public:Base4(){ cout &&"Base4\n"; }};class Derived :public Base1, virtual public Base2,public Base3, virtual public Base4//继承顺序{public:Derived() :Base4(), Base3(), Base2(),Base1(), obj2(), obj1(){//初始化列表cout &&"Derived ok.\n";}protected:OBJ1 obj1;//声明顺序OBJ2 obj2;};int main(){D//初始化cout &&"This is ok.\n";return 0;}结果:Base2 //虚拟基类按照被继承顺序初始化Base4 //虚拟基类按照被继承的顺序&Base1 //非虚拟基类按照被继承的顺序初始化Base3 //非虚拟基类按照被继承的顺序&OBJ1 //成员函数按照声明的顺序初始化OBJ2 //成员函数按照声明的顺序&Derived ok.&This is ok.
TA的推荐TA的最新馆藏[转]&后使用快捷导航没有帐号?
查看: 8595|回复: 6
c++复习题 请高手 答案
新手上路, 积分 28, 距离下一级还需 72 积分
在线时间4 小时
主题帖子积分
新手上路, 积分 28, 距离下一级还需 72 积分
新手上路, 积分 28, 距离下一级还需 72 积分
一、选择题1.下列关于对象的描述中,错误的是___________。A.对象是类的别名& && &B.对象是类的实例&&C.一个类可以定义多个对象& &D.对象之间通过消息进行通信2.在对字符数组进行初始化时,___________是正确的。A.char s1[]=”abcd”;& && && && && && && && && && &B.char s2[3]=”xyz”;C.char s3[][3]={‘a’,‘x’,‘y’};& && && && && && & D.char s4[2][3]={”xyz”,”mnp”};3.联合成员的地址值和所占的字节数___________。A.都相同& && && && && &&&B.都不同& && && && & C.前者相同,后者不同& &D.前者不同,后者相同4.文件包含命令中被包含的文件的扩展名___________。A.必须为.h& && && && &&&B.不能用.h& && && &&&C.必须是.c& && && && && &&&D.不一定是.h5.下列while循环的次数是___________。while(int i=0) i--;A.0& && && && && && && && &B.1& && && && && && &&&C.5& && && && && && && && &&&D.无限6.在函数说明中,下列___________项是不必要的。A.函数的类型& && && &&&B.函数参数类型和名字& && && && && && && && && & C.函数名字& &D.返回值表达式7.在传值调用中,要求___________。A.形参和实参类型类型任意,个数相等& &&&B.实参和形参类型都完全一致,个数相等C.实参和形参对应的类型一致,个数相等&&D.实参和形参对应的类型一致,个数相等8.在一个函数中,要求通过函数来实现一种不太复杂的功能,并且要求加快执行速度,选用_____比较合适。A.内联函数& && && && &&&B.重载函数& && && &&&C.递归调用& && && && && &&&D.嵌套调用9.下列有关对函数模板参数的描述,错误的是___________。A.函数模板是一组函数的样板& && && && && &&&B.函数模板是定义重载函数的一种工具C.模板函数是函数模板的一个实例& && && &&&D.模板函数在编译时不生成可执行代码10.下列各种函数中,___________不是类的成员函数。A.构造函数& && && && &&&B.析构函数& && && &&&C.友元函数& && && && && &&&D.复制构造函数11.___________不是构造函数的特征。A.构造函数的函数名与类名相同& && && && &&&B.构造函数可以重载C.构造函数可以设置默认参数& && && && && & D.构造函数必须指定类型说明12.下述静态数据成员的特性中,___________是错误的。A.说明静态数据成员时前边要加修饰符static& && && && &B.静态数据成员要在类体外进行初始化C.引用静态数据成员时,要在静态数据成员名前加&类名&和作用域运算符D.静态数据成员不有所有对象所共用的13.关于delete运算符的下列描述中,___________是错误的。A.它必须用于new返回的指针& && && && && & B.它也适用于空指针C.对一个指针可以使用多次该运算符& && &&&D.指针名前只用一对方括号符,不管所删除数组的维数14.派生类的构造函数的成员初始化值表中,不能包含___________。A.基类的构造函数& && &B.派生类中子对象的初始化C.派生类中静态数据成员的初始化& && && &&&D.派生类中一般数据成员的初始化15.下列运算符中,在C++语言中不能重载的是_______________。A. *& && && && && && && &&&B. &=& && && && && &&&C. ::& && && && && && && && & D. /16.下列关于面向对象语言的基本要素的描述中,正确的是___________。A.封装性和重载性& && &B.多态性和继承性&&C.继承性和聚合性& && && &D.封装性和继承性17.在int b[][3]={{1},{3,2},{4,5,6},{0}};中b[2][2]的值是___________。A.0& && && && && && && && &B.5& && && && && && &&&C.6& && && && && && && && &&&D.218.下列各运算符中,___________运算的结合性是从左到右。A.三目& && && && && && &&&B.赋值& && && && && & C.比较& && && && && && && &&&D.单目19.预处理命令在程序中都是以___________开关的。A. *& && && && && && && &&&B. #& && && && && && & C. :& && && && && && && && &D. /20.下列for循环的次数为___________。for(int i(0),x=0;!x&&i&=5;i++);A.5& && && && && && && && &B.6& && && && && && &&&C.1& && && && && && && && &&&D.无限21.当一个函数无返回值时,定义它时函数的类型应是___________。A.void& && && && && && &&&B.任意& && && && && & C.int& && && && && && && && & D.无22.下列描述中___________是引用调用。A.形参是指针,实参是地址值& && && && && &&&B.形参和实参都是变量C.形参是数组名,实参是数组名& && && && & D.形参是引用,实参是变量23.重载函数在调用时选择的依据中,___________是错误的。A.参数个数& && && && &&&B.参数的类型& && &&&C.参数的顺序& && && && &&&D.函数的类型24.定义函数模板使用的关键字是___________。A.class& && && && && && & B.inline& && && && && &C.template& && && && && &&&D.operator25.下列关键字中,用来说明类中公有成员的是___________。A.public& && && && && && &B.private& && && && & C.protected& && && && && & D.friend26.___________是不可以作为该类的成员的。A.自身类对象的指针& &B.自身类的对象& &&&C.自身类对象的引用& && &D.另一个类的对象27.通常复制构造函数的参数是_________。A.某个对象名& && && &&&B.某个对象的成员名C.某个对象的引用名& &&&D.某个对象的指针名28.关于new运算符的下列描述中,___________是错误的。A.它可以用来动态创建对象和对象数组B.使用它创建的对象或对象数组,可以使用运算符delete删除C.使用它创建对象时要调用构造函数& && &&&D.使用它创建对象数组时必须指定初始值29.派生类的对象对它的基类___________是可以访问的。A.公有继承的公有成员& && && && && && && && & B.公有继承的私有成员C.公有继承的保护成员& && && && && && && && & D.私有继承的公有成员30.下列关于运算符重载的描述中,________是正确的。A.运算符重载可以改变操作数的个数& && &&&B.运算符重载可以改变优先级C.运算符重载不可以改变语法结构& && && &&&D.运算符重载可以改变结合性31.下面关于对象概念的描述中,___________是错误的。A.对象代表着正在创建的系统中的一个实体&&B.对象之间的信息传递是通过消息进行的C.对象是一个状态和操作(或方法)的封装体&&D.对象就是C语言中的结构体变量32.用来表示指向结构体变量指针的成员的是___________运算符。A. .& && && && && && && &B. -&& && && && && &&&C. &&& && && && && && && && &D. &&33.下列表示引用的方法中,___________是正确的。已知:int m=10;A. int &x=m;& && && &&&B. int &y=10;& && &C.& && && && && && && && && & D.34.带参数的宏定义中,程序中引用宏定义的实参___________。A.只能是常量& && && &&&B.只能是整型量C.只能是整型表达式& && && & D.可以是任意表达式35.下列do-while循环的循环次数为___________。int i(5);do{cout&&i--&&endl;i--;}while(i!=0);A.0& && && && && && && && &B.1& && && && && && &&&C.5& && && && && && && && &&&D.无限36.在函数的返回值类型与返回值表达式的类型的描述中,___________是错误的。A.函数返回值的类型是在定义函数时确定,在函数调用时是不能改变的B.函数返回值的类型就是返回值表达式的类型C.函数返回值表达式类型与函数返回值类型不同时,表达式类型应转换成函数返回值类型D.函数返回值类型决定了返回值表达式的类型37.在C++中,关于设置参数默认值的描述中,正确的是___________。A.不允许设置参数的默认值& && && && && && & B.设置参数默认值只能在定义函数时设置C.设置参数默认值时,应该是先设置右边的再设置左边的D.设置参数默认值时,应该全部参数都设置38.采用函数重载的目的在于___________。A.实现共享& && && && &&&B.减少空间& && && &&&C.提高速度& && && && && &&&D.使用方便,提高可读性39.已知函数模板定义如下:template &class T&T min(T x,T y){return x&y?x:y;}在下列描述中,错误的是___________。A.该函数模板有一个模板参数B.该函数模板生成的模板函数中,参数和返回值的类型必须相同C.该函数模板生成的模板函数中,参数和返回值的类型可以不同D.T类型所允许的类型范围应对运算符&操作有意义40.作用域运算符的功能是___________。A.标识作用域的级别& &B.指出作用域的范围C.给定作用域的大小& &&&D.标识某个成员属于哪个类41.___________是析构函数的特征。A.一个类中只能定义一个析构函数& && && &&&B.析构函数名与类名不同C.析构函数的定义只能在类体内& && && && & D.析构函数可以有一个或多个参数42.友元的作用是__________。A.增加成员函数的种类& &B.加强类的封装性C.实现数据的隐藏性& & D.提高程序的运行效率43.下列关于类模板的描述中,___________是错误的。A.类模板的成员函数可以是函数模板B.类模板生成模板类时,必须指定参数化所代表的具体类型C.定义类模板时只允许有一个模板参数D.类模板所描述的是一组类44.设置虚基类的目的是___________。A.简化程序& && && && &&&B.消除二义性& && &&&C.提高运行效率& && && &&&D.减少目标代码45.在C++中,要实现动态联编,必须使用_____________调用虚函数A.类名& && && && && && &&&B.派生类指针& && &&&C.对象名& && && && && && &&&D.基类指针二、判断题1.C++语言中,既允许单继承,又允许多重继承。2.派生类是从基类派生出来,它还可以生成新的派生类。3.派生类中至少包含了它的所有基类的成员,在这些成员中可能有的是不可访问的。4.虚函数是用virtual关键字说明的成员函数。5.预处理过程是编译过程之前进行的。6.共用体的所有成员共占同一段内存地址空间。7.C++语言是一种以编译方式实现的高级语言。8.运算符的优先级和结合性可以确定表达式的计算顺序。9.switch语句可以嵌套,在switch语句的语句序列中还可以再有switch语句。10.while循环语句的循环体可能一次也不执行11.如果一个函数没有返回值,定义时需用void说明。12.在设置了参数默认值后,调用函数的对应实参就可以省略。13.C++语言中模板分为函数模板和类模板两种。14.析构函数是一种没有返回值也没有参数的成员函数。15.const char * p;说明了p是指向字符串常量的指针。16.C++语言规定对所有用到的变量要“先定义,后使用”。17.向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为(即方法),这种现象称为多态性。18.使用内联函数是以增大空间开销为代价的。19.使几个不同的变量共占同一段内存的结构称为共用体。20.指针变量一经赋值就指向了一个变量。21.自增运算符(++)和自减运算符(--)只能用于整型变量。22.派生类中继承的基类成员的访问权限取决于继承方式。23.C++语言中模板分为函数模板和类模板两种。24.构造函数和析构函数都不可以被继承。25.将单目运算符重载为成员函数时,不需说明形参;将双目运算符重载为成员函数时,只能说明一个形参。26.在对程序进行编译的过程中,不会发现注释中的拼写错误。27.C++语言中的标识符严格区分大小写字母。28.如果对静态存储类别的数值变量未赋初值,则默认值为0。29.break语句可以出现在任何一种循环语句中。30.预处理过程是编译过程之前进行的。31.C++程序中的静态存储类别变量和全局变量的初始化是在编译阶段完成的。32.C++语言中规定:函数返回值的数据类型是由定义函数时规定的数据类型所决定的。33.在C++中,编译时的多态性是通过函数和运算符的重载实现的。34.在C++语言中,实参和形参各占用独立的存储单元。35.在类中,如果不作特别说明,所有成员的访问属性均为私有类型。36.如果一个函数先被调用,后被定义,则应在主调函数中对被调函数进行原型声明。37.C++语言规定,函数的调用可以嵌套,但函数的定义不可以嵌套38.内联函数中不可以包括复杂语句,如switch及循环语句等。39.友元关系是单向的,不可交换的。40.构造函数可以重载,而析构函数不可以重载。41.C++中引进了类和对象的概念,使得C语言发生了质变,即从面向过程变成面向对象。42.已知:int m=10;则int &x=m;是正确的。43.如果对静态存储类别的数值变量未赋初值,则默认值为0。44.常成员函数只能引用数据成员的值,不可以改变数据成员的值。
一般战友, 积分 427, 距离下一级还需 73 积分
在线时间93 小时
主题帖子积分
一般战友, 积分 427, 距离下一级还需 73 积分
一般战友, 积分 427, 距离下一级还需 73 积分
一、选择题1.下列关于对象的描述中,错误的是______A_____。A.对象是类的别名& && &B.对象是类的实例&&C.一个类可以定义多个对象& &D.对象之间通过消息进行通信2.在对字符数组进行初始化时,_____A______是正确的。A.char s1[]=”abcd”;& && && && && && && && && && &B.char s2[3]=”xyz”;C.char s3[][3]={‘a’,‘x’,‘y’};& && && && && && & D.char s4[2][3]={”xyz”,”mnp”};3.联合成员的地址值和所占的字节数___A________。A.都相同& && && && && &&&B.都不同& && && && & C.前者相同,后者不同& &D.前者不同,后者相同4.文件包含命令中被包含的文件的扩展名___________。A.必须为.h& && && && &&&B.不能用.h& && && &&&C.必须是.c& && && && && &&&D.不一定是.h5.下列while循环的次数是______A_____。while(int i=0) i--;A.0& && && && && && && && &B.1& && && && && && &&&C.5& && && && && && && && &&&D.无限 1.C++语言中,既允许单继承,又允许多重继承。正确2.派生类是从基类派生出来,它还可以生成新的派生类。正确3.派生类中至少包含了它的所有基类的成员,在这些成员中可能有的是不可访问的。错误
随手填的没细想,楼主你是想做什么,对答案?这么多全是基础的忙不过来
中级战友, 积分 1665, 距离下一级还需 1335 积分
K币1289 元
在线时间2315 小时
主题帖子积分
中级战友, 积分 1665, 距离下一级还需 1335 积分
中级战友, 积分 1665, 距离下一级还需 1335 积分
K币1289 元
myc3 发表于
一、选择题1.下列关于对象的描述中,错误的是______A_____。A.对象是类的别名& && &B.对象是类的实例&&C.一 ...
第三题选C吧……不是很确定
一般战友, 积分 436, 距离下一级还需 64 积分
在线时间105 小时
主题帖子积分
一般战友, 积分 436, 距离下一级还需 64 积分
一般战友, 积分 436, 距离下一级还需 64 积分
课程预告,帮学堂出品
本帖最后由 冰封飞飞 于
22:36 编辑
一般战友, 积分 427, 距离下一级还需 73 积分
在线时间93 小时
主题帖子积分
一般战友, 积分 427, 距离下一级还需 73 积分
一般战友, 积分 427, 距离下一级还需 73 积分
ye340621 发表于
第三题选C吧……不是很确定
中级战友, 积分 1038, 距离下一级还需 1962 积分
在线时间308 小时
主题帖子积分
中级战友, 积分 1038, 距离下一级还需 1962 积分
中级战友, 积分 1038, 距离下一级还需 1962 积分
感觉不是很难
资深会员, 积分 18980, 距离下一级还需 11020 积分
K币10805 元
在线时间1352 小时
主题帖子积分
中华人民共和国常驻考研论坛大使
资深会员, 积分 18980, 距离下一级还需 11020 积分
资深会员, 积分 18980, 距离下一级还需 11020 积分
K币10805 元
myc3 发表于
一、选择题1.下列关于对象的描述中,错误的是______A_____。A.对象是类的别名& && &B.对象是类的实例&&C.一 ...
不要祸害人。。。。
就这个还能加分?斑竹?
楼主,这些题目你都不会,你看过书吗?
淡定,你来给份答案
您还剩5次免费下载资料的机会哦~
扫描二维码下载资料
使用手机端考研帮,进入扫一扫在“我”中打开扫一扫,扫描二维码下载资料
Powered by Discuz!}

我要回帖

更多关于 成员方法和构造方法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信