《C++primer》读书笔记一

数据抽象和封装的两个优点:
1.避免类内部出现无意的,可能破坏对象状态的用户级错误。
2.随时间的推移,可以根据需求改变或缺陷报告来完善类实现。无需改变用户及代码。

从const成员函数返回*this
不能从const成员函数返回指向类对象的普通引用。const成员函数只能返回*this作为一个const引用。

12.3类作用域
在类作用域之外,成员只能通过对象或指针分别使用成员访问操作符 .或->来访问。操作符左边分别是一个类对象或一个类对象的指针。

必须在类中先定义类型名字,才能将它们用作数据成员的类型,或者成员函数的返回类型或形参类型。

12.4构造函数

class Sales_item
{
public:
          Sales_item() const;//error  错误的
};


构造函数初始化列表:省略初始化列表而在构造函数体内进行初始化是可以的。
构造函数分两个阶段执行:(1)初始化阶段 (2)普通的计算阶段。计算阶段由构造函数函数体重的
所有语句完成。

有些成员必须在构造函数初始化列表中进行初始化,对于这样的成员,在构造函数体中对他们进行赋值将不起作用,没有默认构造函数的类类型成员,以及const或引用类型的成员,不管是哪种类型,都必须在构造函数的初始化列表中进行初始化。

2.成员初始化的次序:按照成员声明一致的次序编写构造函数初始化列表是个好主意,此外,尽可能避免使用成员初始化其他成员。

类类型的数据成员的初始化式:
初始化类类型的成员时,要指定实参并传递给成员函数的一个构造函数,可以使用该类型的任意构造函数。
默认构造函数:只要定义一个对象时没有提供初始化式,就是用默认的构造函数。

只有当一个类没有定义构造函数时,编译器才会自动生成一个默认的构造函数。

如果类包含内置或复合类型的成员,则类不该依赖于合成的默认构造函数,应该定义自己的构造函数来初始化这些成员。

抑制由构造函数定义的隐式转换:用explicit关键字

显示初始化类成员有三个重大缺点:
1.要求类的全体数据成员都是public
2.将初始化的任务放在程序员身上,容易漏忘。
3.如果增加或删除一个成员,必须找到所有的初始化并正确更新。

12.5友元:允许一个类将其非公有成员的访问权授予指定函数或类。以friend开始。
友元声明将已命名的类或非成员函数引入到外围作用域中,此外,友元函数可以在类的内部定义,该函数的作用域扩展到包围该类定义的作用域。

12.6 static类成员。
static成员函数没有this指针,它可以直接访问所属类的static成员。但不能直接访问非static成员。
因为static成员不是任何对象的组成成分,所以static成员函数不能被声明为const。毕竟,将成员函数声明为const就是承诺不会修改该函数所属的对象。最后,static陈元函数也不能声明为虚函数。

static成员必须在类外部定义,不像普通数据成员,static成员不是通过类的构造函数进行初始化的,而是在定义是应该初始化。

小结:类是C++中最基本的特征,允许定义新的类型以适应应用程序的需要,同时使程序更短更易于修改。
数据抽象是指定义数据和函数成员的能力,而疯转是指从常规访问中保护类成员的能力,他们都是类的基本,成员函数定义类的接口,通过将类的实现所用到的数据和函数设置为private来封装类。
类可以定义构造函数,他们是特殊的成员函数,控制如何初始化类的对象,可以重载构造函数,每个构造函数应初始化每个数据成员,初始化列表应包含的是名-值对,其中的名是一个成员,而值则是该成员的初始值。
类可以将对其非public成员的访问权授予其他类或函数,并通过将其他的类或函数设为友元来授予其访问权。
类也可以定义mutable或static成员。mutable成员永远都不能为const,它的值可以再const成员函数中修改,static成员可以是函数或数据,独立于类类型的对象而存在。





  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值