类和对象(6):const成员,&/const &重载

同样以Date类举例。

一、const成员

void Print()
{
    cout << _year << " " << _month << " " << _day << endl;
}

int main()
{
    const Date d1(2023, 11, 15);
    d1.Print();// error C2662: “void Date::Print(void)”: 不能将“this”指针从“const Date”转换为“Date &”
    return 0;
}

&d1的类型为 const Date*,而Print() 的形参类型为Date*,存在权限放大的情况。

为解决此问题,C++引入const成员函数。

1.1 定义

用const修饰的成员函数,称为”const成员函数“。const修饰成员函数,实际上是修饰成员函数隐藏的this指针,表明在该成员函数中不能对类对象的任何成员进行修改

class Date
{
    void Print() const;// ——> void Print(const Date* this)
};

二、&/const &

Date* operator&()
{
    return this;
}

const Date* operator&() const
{
    return this;
}

一般来说,这两个默认成员函数不需要重新定义,编译器会自动生成。只有特殊情况,如:不想让对方获取真实地址。

你可能感兴趣的:(C++,开发语言,c++,1024程序员节)