培养正规的、大气的编程习惯
头文件声明
如果没有定义就定义一个complex。如果定义过了就不再进入头文件的定义,防止多次引用一个头文件这正是我们想要的。
模版T
通过模版T来指定类型
inline函数
类里面定义的函数就是inline函数
不在本体中定义的可以加一个inline
访问级别
所有的数据都应该放在private,有些函数只打算函数内使用设为private
构造函数
创建一个对象,创建一个东西
函数名称和类名相同
可以有默认值
构造函数其实就是代表创建这种东西(就是这个类)所以没有必要有返回类型
利用初始列初始化,
re =r
im = i
为什么要在这里初始化呢?
与在函数里面初始化的区别是:
第一阶段是初始化初值列
第二阶段是大括号里面的赋值
如果在第二阶段大括号里面赋值放弃了第一阶段的初始化,效率变差
不带指针的类多半不需要析构函数
多种构造函数(重载)
构造函数放在private里面
private不被外界调用,下面的调用会报错
那放在private有什么用呢?
设计模式中有一个Singleton,就把构造函数放在private里面
Singleton意思为为单体
里面自己准备了自己
只有通过这个函数才能获取自己
告诉我们确实有这种写法把构造函数放在private里面。
常量成员函数
对class里面有不改变数据和改变数据的,
只是拿出来,
前面加上const,表示我这个对象是不可以改的
我们在底下应用的时候不加const不会报错,但是我们要写出大气的代码,要考虑周全
如果没有const就会报错
参数传递by value 或by 引用
by value就是整包都传过去,value多大就放过去 (栈)
尽量传引用,过去C中都是指针(4字节很快)
**C++我有一个指针但更漂亮–引用 **
尽量所有的参数传递都传引用
如果是字符呢? 1个字节 但是大范围都是引用
如果不希望对方改 加cosnt。
返回值by 引用
尽量返回值为引用,后面再谈。
友元
这个函数可以直接拿private里面的内容,因为是friend。
朋友直接拿数据会快一点相比函数
朋友可以打破封装
同一个class中的各个对象互为友元
看似打破了封装,其实是成立的。
小结:
-
数据一定放在private里面
-
参数尽可能以reference来传,要不要const视情况而定
-
返回值尽量以reference来传。首先考虑我用reference可不可以
-
在类的本体里的函数应该加const的就应该加,否则设计者想用的const的时候你没加会报错。
-
构造函数有一个特殊的语法叫innegerlazationlist:尽量去用它。
所有的成员函数里面都有一个隐藏的参数,这里是this其实虽然他没写但是他是隐藏的