2.6.1 定义Sales_item类型
尽管我们还写不出完整的Sales_item类,但是可以尝试着把那些数据元素组织到一起形成一个简单点的类。初步的想法是用户能直接访问其中的数据元素,也能实现一些基本的操作。
既然我们筹划的这个数据结构不带有任何运算功能,不妨把它命名为Sales_data以示Sales_item的区别。Sales_data初步定义如下:
struct Sales_data {
std::string bookNO;
unsigned units_sold = 0;
double revenue = 0.0;
};
我们的类以关键字struct开始,紧跟着类名和类体(其中类体部分可以为空)。类体由花括号包围形成了一个新的作用域(参见2.2.4节,第43页)。类内部定义的名字必须唯一,但是可以与类外部定义的名字重复。
类体右侧的表示结束的花括号后必须写一个分号,这是因为累体后面可以紧跟着变量名以示对该类型对象的定义,所以分号必不可少:
struct Sales_data { /* ... */ } accum trans *salesptr;
// 与上一条语句等价,但可能更好一些
struct Sales_data { /* ... */ };
Sales_data accum trans *salesptr;
分号表示声明符(通常为空)的结束。一般来说,最好不要把对象的定义和类的定义放在一起。这么做无异于把两种不同实体的定义混在了一条语句里,一会儿定义类,一会儿又定义变量,显然这是一种不被建议的行为。
WARNING:很多新手程序员经常忘了在类定义的最后加上分号。
类数据成员
类体定义类的成员,我们的类只有数据成员(data member)。类的数据成员定义了类的对象的具体内容,每个对象有自己的一份数据成员拷贝。修改一个对象的数据成员,不会影响其他Sales_data的对象。
定义数据成员的方法和定义普通变量一样:首先说明一个基本类型,随后紧跟一个或多个声明符。我们的类有3个数据成员:一个名为bookNO的string成员、一个名为units_sold的unsigned成员和一个名为revenue的double成员。每个Sales_data的对象都将包括这3个数据成员。
C++11新标准规定,可以为数据成员提供一个类内初始值(in-class initializer)。创建对象时,类内初始值将用于初始化数据成员。没有初始值的成员将被默认初始化(参见2.2.1节,第40页)。因此当定义Sales_data的对象时,units_sold和revenue都将初始化为0,bookNO将初始化为空字符串。
对类内初始值的限制与之前(参见2.2.1节,第39页)介绍的类似:或者放在花括号里,或者放在等号右边,记住不能使用园括号。
7.2节(第240页)将要介绍,用户可以使用C++语言提供的另外一个关键字class来定义字的数据结构,到时也将说明现在我们使用struct的原因。在第7章学习与class有关的知识之前,建议读者继续使用struct来定义自己的数据类型。
普通的冒险故事提示您:看后求收藏(卧龙小说网http://www.wolongxs.com),接着再看更方便。
好书推荐:《我的剧本世界在自主运行》、《我是舰娘》、《我的师妹是妖女》、《交错世界之学院都市》、《认清现实后,她们开始追夫火葬场》、《好徒儿你就饶了为师伐》、