前言:
本篇知识点:初始化列表、explicit关键字、static成员、友元、内部类、匿名对象、编译器的优化
专栏:C++初阶
目录
再谈构造函数
1️⃣构造函数体赋值
2️⃣初始化列表
explicit关键字
static成员
1.static概念
2.static特性
面试题
友元
友元函数
友元类
内部类
内部类概念
优化面试题
匿名对象
匿名对象和有名对象
拷贝对象时的一些编译器优化
知识点回顾:
示例(包含讲解):
传值传参和传值返回
构造+拷贝构造
连续的拷贝构造
拷贝构造+赋值重载(无法优化)
再次理解类和对象
再谈构造函数
对于MyQueue 不需要写它的构造函数,编译器自动生成,会调用它的默认构造。
但是如果Stack类不提供默认构造给你,那就得实现显示调用,该怎么办呢?
有两种办法。
1️⃣构造函数体赋值
在创建对象时,编译器通过调用 构造函数,给对象中各个成员变量一个合适的初始值。 代码示例:class Date { public: Date(int year, int month, int day) { _year = year; _month = month; _day = day; } private: int _year; int _month; int _day; };虽然上述构造函数调用之后,对象中已经有了一个初始值,但是 不能将其称为对对象中成员变量的初始化,构造函数体中的语句只能将其称为 赋初值,而不能称作 初始化。 因为初始化只能初始化一次,而构造函数体内可以多次 赋值 。 如下例子:
class Date { public: Date(int year=2024, int month=1, int day=1)//构造函数初始化,只能初始化一次 //赋值 { _year = year;//可以多次赋值 _year = 2023; _year = 2021; //... _month = month; _day = day; } private: int _year; int _month; int _day; };
2️⃣初始化列表
初始化列表:以一个 冒号 开始,接着是一个以 逗号 分隔的数据成员列表,每个"成员变量"后面跟 一个放在括号中的初始值或表达式。 代码如下:#include using namespace std; class Date { public: Date(int year, int month, int day) : _year(year) , _month(month) , _day(day) { } void Print() { cout
文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。
还没有评论,来说两句吧...