2018年8月22日
摘要: 7.56:什么是类的静态成员?它有何优点?静态成员与普通成员有何区别? Ans:所谓类的静态成员,其独立于类的对象,与类本身相关联,它的生命周期从定义到整个程序结束。其声明语句之前带有关键字static。 静态成员与普通成员的区别:1)静态成员与类本身相关联,而普通成员与类的对象相关联。2)静态成员 阅读全文
posted @ 2018-08-22 22:27 linlh 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 1、类的静态成员存在于任何类的对象之外,对象中不包含任何与静态数据成员有关的数据。类的静态数据成员被所有的类的对象共享,所以它不包含任何this指针,也就不能将其成员函数声明为const。 2、类中的成员函数可以直接使用成员函数访问静态成员,但是在类外的对象、引用或指针需要通过作用域运算符指出其具体 阅读全文
posted @ 2018-08-22 22:03 linlh 阅读(384) 评论(0) 推荐(0) 编辑
摘要: 1、数据抽象,是指将对象的具体实现与对象所能做的操作分离开来。其依赖于接口与实现分离的编程,类的接口包括了用户所能执行的操作,而类的实现包括了类的数据成员、接口实现的函数体以及定义类所需的私有的各种私有函数。 2、封装使得类的用户只能使用接口,而无法访问实现的内容。想实现数据抽象和封装,要先定义一个 阅读全文
posted @ 2018-08-22 21:13 linlh 阅读(231) 评论(0) 推荐(0) 编辑
摘要: 7.54:Debug中以Set_开头的成员函数应该被声明成constexpr吗?如果不,为什么? Ans:不应该被声明成constexpr。以Set_开头的成员函数是用来设置错误的,一般是进行赋值操作的,constexpr函数的函数体有且仅有一条return语句,用来返回常量表达式,显然达不到想要的 阅读全文
posted @ 2018-08-22 21:09 linlh 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 1、字面值类型的类可能包含constexpr函数成员,这种成员必须满足constexpr函数的所有要求,它们是隐式const的,constexpr函数返回类型和参数都是字面值类型。 2、数据成员时字面值的聚合类,就是字面值常量类。当然,若不是聚合类,符合以下几条条件也是字面值常量类:1)数据成员全是 阅读全文
posted @ 2018-08-22 19:55 linlh 阅读(479) 评论(0) 推荐(0) 编辑
摘要: 7.52:使用2.6.1节(64页)的Sales_data类,解释下面的初始化过程。如果存在问题,尝试修改它。 Sales_data item = { "978-0590353403", 25, 15.99}; Ans:将bookNo初始化成“978-0590353403”,将units_sold初 阅读全文
posted @ 2018-08-22 18:46 linlh 阅读(118) 评论(0) 推荐(0) 编辑
摘要: 7.47:说明一个string参数的Sales_data构造函数是否应该是explicit的,并解释这样做的优缺点。 Ans:应该。因为在Sales_data这个类中,当我们输入一个ISBN号,一般还要用户输入一个书的价格和数目,如果不使用explicit声明这个函数时,那么意味着可以进行隐式地转换 阅读全文
posted @ 2018-08-22 17:34 linlh 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 1、若构造函数只接受一个实参,则它实际上定义了转换为此类类型的隐式转换机制,这种构造函数又称作转换构造函数。 2、能通过一个实参调用的构造函数定义了该参数类型向类类型隐式转换的规则。也就是说,若定义了只接受一个实参的构造函数,那么可以用这种参数类型去替换原本需要类类型的地方,当我们使用了这个实参类型 阅读全文
posted @ 2018-08-22 16:50 linlh 阅读(408) 评论(0) 推荐(0) 编辑
摘要: 7.44:下面这条声明合法吗?如果不,为什么? vector<NoDefault> vec(10); Ans:不合法。由于容器vector是包含10个NoDefault类型的对象集合,每个对象都进行默认初始化,由于NoDefault类没有定义默认构造函数,所以无法对每个对象执行默认初始化,故不合法。 阅读全文
posted @ 2018-08-22 14:44 linlh 阅读(182) 评论(0) 推荐(0) 编辑