C++ Primer 学习笔记_48_类与数据抽象 -类的定义跟声明【下】
来源:互联网 发布:俄罗斯方块网页版编程 编辑:程序博客网 时间:2024/04/30 03:07
类
--类的定义和声明【下】
三、关于类定义的更多内容【接上】
//P374 习题12.8class Sales_item{public: double avg_price() const; bool same_isbn(const Sales_item &rhs) const { return rhs.isbn == isbn; } Sales_item():units_sold(0),revenue(0){}private: std::string isbn; unsigned units_sold; double revenue;};double Sales_item::avg_price() const{ if (units_sold) { return revenue / units_sold; } return 0;}
//习题12.9class Screen{public: typedef std::string::size_type index; char get() const { return contents[cursor]; } inline char get(index ht,index wd) const; index get_cursor() const; Screen(index ht,index wd,std::string Cont):height(ht),width(wd),contents(Cont) {}private: std::string contents; index cursor; index height,width;};
四、类声明和类定义
在一个给定的源文件中,一个类只能被定义一次。如果在多个文件中定义一个类,那么每个文件中的定义必须是完全相同的。
可以声明一个类而不定义它:
//前向声明class Screen;
在声明之后、定义之前,类Screen是一个不完全类型,即:已知Screen是一个类型,但不知道包含哪些成员。
不完全类型(incompletetype)只能以有限方式使用。不能定义该类型的对象。不完全类型只能用于定义指向该类型的指针及引用,或者用于声明(而不是定义)使用该类型作为形参类型或返回类型的函数。
在创建类的对象之前,必须完整的定义该类。必须是定义类,而不是声明类,这样,编译器就会给类的对象预定相应的存储空间。同样的,在使用引用或指针访问类的成员之前,必须已经定义类。
为类的成员使用类声明:
只有当类定义已经在前面出现过,数据成员才能被指定为该类类型。如果该类型是不完全类型,那么数据成员只能是指向该类类型的指针或引用。
因为只有当类定义体完成后才能定义类,因此类不能具有自身类型的数据成员。然而,只要类名一出现就可以认为该类已声明。因此,类的数据成员可以是指向自身类型的指针或引用:
class LinkScreen{ Screen Window; LinkScreen *next; LinkScreen *prev;};
类的前身声明一般用来编写相互依赖的类。
//P375 习题12.11class Y;class X{ Y *y;};class Y{ X x;};
五、类对象
定义一个类时,也就是定义了一个类型。一旦定义了类,就可以定义该类型的对象。定义对象时,将为其分配内存空间,但(一般而言)定义类型时不进行存储分配。
通过类定义出的对象都具有自己的类数据成员的副本。修改其中一个对象不会改变其他该类对象的数据成员。
1、定义类类型的对象
定义了一个类类型之后,可以按以下两种方式使用。
1)将类的名字直接用作类型名。
2)指定关键字class或struct,后面跟着类的名字:
Screen scr; //两条语句作用相同 class Screen scr;
2、为啥类的定义以分号结束
因为在类定义之后可以接一个对象定义列表,所以,定义必须以分号结束:
class Sales_item{ //...};class Sales_item{ //...} ccum,trans;
【最佳实践:】
通常,将对象定义成类定义的一部分是个坏主意!!!这样做,会使所发生的操作难以理解。对读者而言,将两个不同的实体(类和变量)组合在一个语句中,也会令人迷惑不解。
- C++ Primer 学习笔记_48_类与数据抽象 -类的定义跟声明【下】
- C++ Primer 学习笔记_47_类与数据抽象 --类的定义和声明
- C++Primer学习-类(类的定义和声明)
- c++ primer 学习笔记:类之类的声明和定义
- C++ Primer学习笔记 之 变量的声明与定义
- C++ Primer 学习笔记_52_类与数据抽象 -构造函数【下】
- C++ Primer 学习笔记_49_类与数据抽象 -暗含的this指针
- C++primer学习笔记-----7.1定义抽象数据类型
- 【从C到C++学习笔记】类声明/公有私有保护成员/数据抽象和封装
- C++Primer读书笔记之变量的定义与声明
- C++ Primer 学习笔记_50_类与数据抽象 --类作用域
- C++ Primer 学习笔记_51_类与数据抽象 -构造函数【上】
- C++ Primer 学习笔记_53_类与数据抽象 --友元、static成员
- C++ Primer 学习笔记_54_类与数据抽象 -复制构造函数、赋值操作符
- C++ Primer 学习笔记_55_类与数据抽象 -析构函数
- C++ Primer 学习笔记_56_类与数据抽象 -消息处理示例
- C++ Primer 学习笔记_57_类与数据抽象 -治理指针成员
- c++ primer 学习笔记21类的定义和声明、隐含的this指针、类作用域
- nyoj 119 士兵杀敌(三)
- C++ Primer 学习笔记_47_类与数据抽象 --类的定义和声明
- 正多变形的滚动与旋轮线下方的面积(有趣的几何问题)
- 指针函数与函数指针的区别
- ORACLE数据库-学习笔记1
- C++ Primer 学习笔记_48_类与数据抽象 -类的定义跟声明【下】
- C++第五次实验-数组分离
- Java面试题 单例类
- android 混淆
- request.getHeader("referer")防盗链
- C++ Primer 学习笔记_49_类与数据抽象 -暗含的this指针
- Java多线程编程3--线程间通信--类ThreadLocal与类InheritableThreadLocal的使用
- Android库. 1 WIFI相关
- 共享内存同步问题