概述
文章目录
- 定义抽象数据类型
- 定义类
- this指针
- const成员函数
- 构造函数
- 默认构造函数
- 构造函数初始值列表
- 访问控制与封装
- 友元
- 类的其他特性
- 可变数据成员
- 从const成员函数返回*this
- 类的声明
- 构造函数
- 构造函数初始值列表
- 必须提供初始值的情况
- 成员初始化的顺序
- 默认实参
- 隐式的类类型转换
- 抑制构造函数定义的隐式转换
- 为转换显式地使用构造函数
定义抽象数据类型
定义类
this指针
调用成员函数时,用请求该函数的对象的地址初始化this,*this
返回的是该对象的引用,this是一个常量指针
const成员函数
const的作用是修改隐式this指针的类型,表示this是一个指向常量的指针,该函数不会修改任何成员变量
std::string isbn() const { return this->bookNo; }
构造函数
控制对象的初始化过程
默认构造函数
默认构造函数没有实参
如果类没有定义任何构造函数,则编译器会合成默认构造函数。如果类定义了其它的构造函数,而没有定义默认构造函数,编译器也不会为类合成默认构造函数
合成的默认构造函数将按如下规则初始化类的数据成员:
- 若存在类内初始值,用它来初始化成员
- 否则,默认初始化该成员
构造函数初始值列表
Sales_data(const std::string &s, unsighed n, double p): bookNo(s), units_sold(n), revenue(p*n) { }
不在构造函数初始值列表中的成员将使用类内初始值初始化,或默认初始化
访问控制与封装
struct:成员默认是public的
class:成员默认是private的
友元
友元(类或函数)可以访问类的非public成员,友元不是类的成员,但必须在类内声明友元
class Sales_data
{
friend Sales_data add(const Sales_data&, const Sales_data&);
// 其它成员
......
}
类的其他特性
可变数据成员
mutable成员永远不会是const,可以被const成员函数修改,任何成员函数都能改变它的值
class Screen
{
public:
void some_menber() const { ++access_ctr; }
private:
mutable size_t access_ctr;
}
从const成员函数返回*this
返回的是常量引用
如果需要返回非常量引用,则需要针对const重载,实现两个版本的函数,根据隐式传入的*this指针决定使用const或非const版本
类的声明
类被声明后就可以定义指向这种类型的指针或引用,而不必等到类被定义后,但不能在类中定义类类型的成员,因为此时编译器还不知道要为类的对象分配多少空间
类在编译时先编译成员声明,再编译成员函数体,所以成员函数中可以使用类内定义的任何名字
构造函数
构造函数初始值列表
必须提供初始值的情况
如果成员是const或引用,则必须将其初始化
class ConstRef
{
public:
ConstRef(int ii);
private:
int i;
const int ci;
int &ri;
}
ConstRef::ConstRef(int ii)
{
// 在函数体执行前初始化,函数体中是赋值
i = ii;
ci = ii;
// 错误,不能给const赋值
ri = i;
// 错误,ri未被初始化
}
// 正确,显式地初始化引用和const成员
ConstRef::ConstRef(int ii) : i(ii), ci(ii), ri(i) { }
成员初始化的顺序
成员初始化的顺序和它们在类定义中出现的顺序一致
默认实参
Sales_data(std::string s = ""): bookNo(s) { }
隐式的类类型转换
转换构造函数:如果构造函数只接受一个实参,则它实际上定义了转换为此类类型的隐式转换机制
string null_book = "9-999-99999-9";
item.conbine(null_book);
用null_book
隐式创建了一个Sales_data
对象,只允许一步类类型转换
抑制构造函数定义的隐式转换
将构造函数声明为explicit
explicit Sales_data(std::string &s): bookNo(s) { }
item.combine(null_book);
// 错误,string构造函数是explicit的
为转换显式地使用构造函数
item.combine(Sales_data(null_book));
最后
以上就是欣慰冷风为你收集整理的【C++ Primer读书笔记】第7章 类的全部内容,希望文章能够帮你解决【C++ Primer读书笔记】第7章 类所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复