値型と参照型はクラス設計で重要な要素である。
- 値型: 内部データが同じならば同じものとして扱う。
- 参照型: 内部データが同じでも異なるものとして扱う。
intやdouble,std::string, 画像,行列: 値型クラス
その他: 参照型
例えばStudentクラスについて考える。
class Student
{
public:
Student(const std::string name) : name_(name) {}
Student(const char* name) : name_(name) {}
private:
const std::string name_;
};
上記クラスで同姓同名の人物は同一人物であろうか?異なるならばStudentは参照型クラスとすべきである。
また、このことと非常に密接な関係にあるのがコピーである。参照型クラスでは定義よりコピーした段階でそれは同一ではなくなる。一方で、値型クラスではコピーしても値が同じ限り同一である。