如何编写一个不带指针成员变量的类
关键点
- c和c++的不同
- c++中有对象的概念,每个对象中包含自己的数据和方法
- 头文件中要进行防卫式声明
- c++程序的基本形式
- 类头文件,cpp文件,标准库头文件
- include<>引用标准库头文件,include""引用类头文件
- 头文件的布局
#ifndef __MYCOMPLEX__
#define __MYCOMPLEX__
...
#endif //__MYCOMPLEX__
- 头文件的布局
- 内联函数
- 类声明中定义的函数,自动为inline;但是函数是否真的为inline,由编译器决定
- 函数前添加inline
- 类声明中,数据和函数访问权限关键字
- 在构造函数的初值列中完成对类中数据的初始化操作,而不是在构造函数体内进行赋值;默认参数的设定
- c++的函数重载规则(overloading)
- 函数同名,但是编译器中不同名
- 构造函数常常有重载现象
- 重载函数的参数必须不同,默认参数和没有参数的情况不符合要求
- 构造函数放在private中
- const的使用
- const在函数体的大括号前,表示不能改变函数体中任何数据
- 参数传递的两种形式:pass by value && pass by reference (to const)
- pass by value:按传递参数的类型复制内容,如果参数过大,会占用过多内存
- pass by reference:只传递一个指针大小
- pass by reference时,如果不希望传递的参数被改变,需要在参数前增加const关键字
- 返回值传的两种形式:pass by value && pass by reference (to const)
- 参数和返回值的传递,尽量按照by reference(在情况允许时)
- 友元:可以访问类的私有数据和方法
- 相同class的各个objects之间互为友元
- 一个好的类对象设计的几个要素
- 类数据一定是private的
- 参数和返回值尽可能按照reference传递,视情况增加const
- 函数方法要考虑const的使用
- 构造函数中的初始列中初始类数据
- 操作符重载
- 每个函数中都隐藏一个默认函数,this(类对象本身)
- 当by reference传递时,传递者无需关注接收者是以reference形式接收
- 不建议操作符函数的返回值类型为void,因为可能会连续使用操作赋函数
c1 += c2 += c3;
思考
- 多个类对象对应多个类对象数据,却都对应同一份类函数,如何实现?
- 何时不可以by reference传递返回值
- 当返回值为local时,函数的返回值不可以按照引用传递
- local的对象在函数执行完毕后会被销毁,如果传递引用会导致不可控的错误