您的位置:首页 > 其它

(七)类

2014-02-28 01:13 274 查看
类的有点是讲相关联的数据放到了一起,并且提供了相应的操作方法,可以方便使用和管理.

但凡有数据流入类,那么就要对数据进行合法有效性检查,不符合则抛出异常,在类内部,因为已经确认数据的有效性,应该检查函数参数的有效性,使用assert,类中和IO相关的操作函数应该特别起名?

应该使用常量成员函数,来提高可用性.

无论何时只要类的对象被创建,就会执行构造函数

析构函数不被执行的情况,线程非自然退出导致栈未被清理,相应的析构函数不会被执行.

应该使用类内初始值来提供成员的默认初始值,应该使用统一初始化列表来初始化所有的对象.

当某个数据成员被构造函数初始值列表忽略时,他将以与合成默认构造函数相同的方式隐式初始化,意味着成员会使用类内初始化.没有出现在构造函数初始值列表中的成员将通过相应的类内初始值初始化.

=default 来要求编译器生成默认构造函数.

封装是为了安全的操作数据,作为一个关卡设防,统一一次性检查无效的数据输入,确保类内代码逻辑正常.防止无意破坏内部逻辑,防止破坏对象状态,减少测试代码,并且实现细节可以随时改变,而接口不会变.

friend友元的作用是取消访问控制的限制,private protect等,友元声明不同于具体的函数声明,类型声明,具体使用到相应的类或函数,需要对他们进行声明.一般在特殊情况下使用友元,否则使用成员函数.如果要把一组重载函数声明为它的友元,则需要对这组函数每一个分别声明

在类中定义类型,应该定义在类的开头,防止类型没有被识别.

声明和定义的地方同事说明inline 是不合法的,最好在类的外部定义inline

const成员或对象通常不会被修改,为了特殊情况打破这个,可以使用可变数据成员mutable,可变数据成员永远不会是const,可以对其进行读写操作.

有时候可以写函数的const和非const的重载,目的是为了方便非const的连续调用修改,因为防止从非const得到返回const的引用而无法继续调用非const函数.而这样的方法本身其实是const的,

一个基本的愿望是避免在多出使用相同的代码

不完全类型声明;class someclass;可以定义这种类型的指针或引用.也可以声明为参数或函数的返回类型

类构造函数中,成员初始化顺序与他们在类中定义的顺序一致,而并非与初始化列表一致,最要不要用成员初始化成员,容易出错!!

转换构造函数,在{}中,如果存在用给定参数作为构造函数的参数,那么可以隐式转换成对应对象.如果要抑制隐式转换行为使用explicit(好用),此时可以通过显示转换,class{"date"};

如果要将类转换为一种类型可以使用类型转换运算符 operator type() const;

class SomeClass
{
private: int val;
public:
operator int() const{return val;}
}


聚合类.(测试没有发现什么特别的地方?)

类内静态成员的类型可以是不完整类型,即可以是类本身.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: