从最基本的层面理解,数据结构是把一组相关的数据元素组织起来然后使用她们的策略和方法。
C++运行用户以类的形式自定义数据类型,而库类型是语言自身定义的,类在C++中十分重要!尽管sales_item很简单,但要想给出其完整定义还得学完14章之后。
#include <iostream> //关键字struct紧跟类名和类体(类体可空) //为什么注释写在相应代码上面而不是同一行?因为一行可能不够! /* *什么时候用界定符对注释符?什么时候用单行注释? *当内容一行可以写完时用单行注释。 *当内容过多,或者有代码案例时用界定符对注释。 */ struct sales_data { //类体内部定义的名字(names5)必须唯一,但可以与类外重复;需要注意的是,names、value、variables不一样!variables=names+value /* *类的数据成员定义了类的对象的具体内容,每个对象有自己的一份数据成员拷贝 *在这里,有名为bookNo的string成员,名为units_sold的unsigned成员等。 *“每个对象有自己的一份数据成员拷贝”是指,因为内部名字可以与外部名字一样,所以每个类里都要有属于自己的名为bookNo的某个类型的拷贝。 *如果下面多个int f(),则这是一个函数成员。 */ //定义数据成员的方法和定义普通变量一样;每个定义的类里都将包括类中定义的数据成员 /* *C++11规定,可以为数据成员提供一个类内初始值,用于初始化数据成员,即外部没有初始值的成员将被默认初始化。 *比如,定义sales_data对象时,存在数据成员bookNo的初始化为空字符串,units_sold初始化为0等 *类内初始值的方法有: *int a = 0; *int a = { 0 }; *int a{ 0 }; *唯一和外面限制不同的在于圆括号的不行。 */ std::string bookNo; unsigned units_sold = 0; double revenue = 0.0; //这里必须有个“;”,what?see low }; /* *因为类体后面可以紧跟变量名来定义这个类的变量,所以要加“;” *struct sales_data{ *.................. *}accum,trans,*salesptr; *上下两段代码等价,但通常下面的更好,因为把定义类和定义变量两种不同实体的定义混一起不好 *struct sales_data{.......}; *sales_data accum,trans,*salesptr; */ int main() { return 0; }
这里要注意,定义类的关键字还有一个是 class,在P240会介绍,至于什么时候用class,什么时候用struct,为什么这用structural,到时会一一说明。
上面的学习中,引出了一个疑问:类成员函数为什么不是每个都有自己的成员拷贝?
百度了一下找到这么一篇答案,我认为现在还不必深究,所以先放一边以后再说:
http://bbs.csdn.net/topics/60039632