C++温故而知新----2

来源:互联网 发布:淘宝开学季什么时候 编辑:程序博客网 时间:2024/05/19 09:12
存疑概念:

提醒:
。定义位于类声明中的函数都将自动成为内联函数,在类外定义前加incline也可以实现
。不同对象的非内联函数只有一个副本
。常规枚举可以自动转换为整型,作用域内枚举不行,需要显示类型转换
重要知识点:
第十章
10.3 类的构造函数和析构函数
10.3.3默认构造函数
。调用默认构造函数
类名 test; //使用了默认构造函数
10.3.4析构函数
10.3.5改进类
5.C++11列表初始化
Stock jack {"test"};
6.const成员函数
void Stocd::show const;

const Stock jack {"test"};
jack.show(); //若声明show时无const,会报错
10.3.6构造函数和析构函数小结
。若构造函数只有一个参数,可以
Stock jack = "test";
Stock jack("test");
初始化

10.4 this指针

10.5 对象数组
Stock test[5];//调用默认构造函数
Stock test1[2] = {
Stock("111"),
Stock("222")
}; //调用有参构造函数
Stock test2[10] = {
Stock("111"),
Stock()
}; //混合调用,余下函数全部使用默认构造函数
。初始化对象数组的方案是,先调用无参构造函数创建数组,再用花括号里的构造函数创建临时对象,进行复制,所以必须有无参构造函数

10.6 类的作用域
。类中定义的名称的作用域都为整个类
10.6.1作用域为类的常量
1.在类中声明一个枚举,作用域为整个类
声明枚举不会创建类数据成员
2.使用关键字static
该常量与其他静态变量存储在一起,而不是在对象中,被所有对象共享
10.6.2作用域内枚举
enmu egg{small,large};
enum tshirt{small,large};
无法通过编译

enum class tshirt{small,large};//作用域为类的枚举,可以通过编译
*常规枚举可以自动转换为整型,作用域内枚举不行,需要显示类型转换

可选择枚举底层类型
enum class : short{small,large};//底层类型为short,若未指定,底层类型依赖于实现
//本人使用vs2017,未能成功

10.7 抽象数据类型

第十一章
11.1 运算符重载

11.2 计算时间:一个运算符重载示例
。运算符函数由对象调用
total = test1 + test2;
total = test1.operator+(test2);
11.2.2重载的限制
。必须有一个操作数为用户定义
。不能违法原来的语法规则
例:不能将求模重载成使用一个操作数
。不能创建新运算符
。部分运算符不能重载
。部分运算符只能通过成员函数进行重载

11.3 友元
。友元函数
。友元类
。友元成员函数
11.3.1创建友元
。友元函数在类中声明,不是成员函数
。与成员函数访问权限相同
。定义时,不使用类和friend限定符

11.4 重载运算符:作为成员还是非成员
。无太大区别,不能同时使用造成二义性

11.6 类的自动转换和强制类型转换
。若类存在接收一个参数的构造函数
Student stu;
stu = "mty";
程序使用一个参数的构造函数创建一个临时对象,并将"mty"作为初始化值,随后采用逐成员赋值方式将临时对象复制到stu中
。在构造函数前加explicit关闭以上特性,仍允许显示转换
11.6.1转换函数
。以上Student对象可以做逆转换么?
可以,但使用转换函数而不是构造函数

。转换函数定义
operator typeName();
转换函数必须是泪方法
不能指定返回类型
不能有参数
operator double();//声明
Student::operator double(){}//定义
定义以上函数后,对象可以进行显示/隐式转换
同样可在函数声明前加explicit关闭隐式转换
11.6.2转换函数和友元函数
原创粉丝点击