nprogram’s blog

気ままに、プログラミングのトピックについて書いていきます

const メンバ変数がいるときの代入演算子

はじめに

自分で作成したクラスのメンバ変数が、constメンバ変数であった場合、デフォルトの代入演算子では正しく代入できません。

そのため、代入演算子を自分で実装します。

例えば、nameとageというメンバ変数があったとしまして、ageだけconstメンバ変数の場合は、代入演算子でageの値のみ変更させるようにします。

コード

#include <iostream>

class Person
{
public:
    // 参照
    const std::string m_name;
    int m_age;

    // コンストラクタ
    Person(const std::string name, int age) : m_name(name), m_age(age)
    {
    }
    
    // 代入演算子
    Person &operator=(const Person &obj){
        // ageだけコピー。nameはconstなのでコピーしない
        this->m_age = obj.m_age;
        return *this;
    }
};

int main(void){
    Person person1("Mickey", 15);
    Person person2("Tom", 30);
    
    // 名前はconstであるため、不変。年齢だけ変更されます。
    person1 = person2;
    std::cout << person1.m_name << std::endl;
    std::cout << person1.m_age << std::endl;
    
}
Mickey
30

参考リンク