在C++中构造访问私有数据成员的方法

Const methods to access private data members in C++

本文关键字:数据成员 方法 访问 C++      更新时间:2023-10-16

我的项目在这里https://www.dropbox.com/s/foq27lafefoes7d/lab3.zip?dl=0我还有很多其他错误,但在问这个问题之前,我确保我没有试图重新定义字符串文字或任何东西。

    void Player::Display() const
{
    cout << "nPlayer Name:  " << GetName() << 
        "nGrade:        " << GetGrade() << "nG.P.A.        " << GetGPA() << endl;
}

问题发生在这里,我遇到了访问冲突,有没有办法在保持Display常量的同时解决这个问题,或者这个代码是否有效,而我的问题在其他地方,并且没有被调试器捕获?

    //Getters FOUND OUT THESE NEED TO BE CONSTANT RETURN TYPES AS WELL
const char* Player::GetName() const {return m_name;}
const int Player::GetGrade() const {return m_grade;}
const double Player::GetGPA() const {return m_gpa;}

更相关的代码,所以我了解到,要用这样的const方法读取私有数据成员,你必须做出两个const"承诺",不更改私有的

 class Player
{
public:
    char* GetName() const;
    int GetGrade() const;
    double GetGPA() const;

private:
    char* m_name;
    int m_grade;
    double m_gpa;
};

如果没有得到任何编译错误,可能的原因是从GetName()返回char*而不是const char*。如果名称是用只读内存初始化的(即使用像"Tom"这样的双引号),并且您试图向GetName()返回的指针写入字符,则会出现访问冲突。