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

简介: 类和对象(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;
}

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

相关文章
|
6月前
|
编译器 C++
C++初阶--类与对象--const成员和日期类的实现
C++初阶--类与对象--const成员和日期类的实现
|
4月前
|
存储 C++
【C++】string类的使用③(非成员函数重载Non-member function overloads)
这篇文章探讨了C++中`std::string`的`replace`和`swap`函数以及非成员函数重载。`replace`提供了多种方式替换字符串中的部分内容,包括使用字符串、子串、字符、字符数组和填充字符。`swap`函数用于交换两个`string`对象的内容,成员函数版本效率更高。非成员函数重载包括`operator+`实现字符串连接,关系运算符(如`==`, `&lt;`等)用于比较字符串,以及`swap`非成员函数。此外,还介绍了`getline`函数,用于按指定分隔符从输入流中读取字符串。文章强调了非成员函数在特定情况下的作用,并给出了多个示例代码。
|
6月前
|
编译器 C++
【C++】类与对象(运算符重载、const成员、取地址重载)
【C++】类与对象(运算符重载、const成员、取地址重载)
43 2
|
6月前
|
C++
C++在构造函数中如何给const成员赋值
C++在构造函数中如何给const成员赋值
|
6月前
|
编译器 C++
在 C++ 中const 成员函数的运用
在 C++ 中const 成员函数的运用
|
6月前
|
C++
C++类中的const使用
C++类中的const使用
|
6月前
|
C++
c++中const修饰成员函数的问题
问题引入: 看下面这一段代码:
51 0
C++中的const成员变量和成员函数
在类中,如果你不希望某些数据被修改,可以使用const关键字加以限定。const 可以用来修饰成员变量和成员函数。 const成员变量 const 成员变量的用法和普通 const 变量的用法相似,只需要在声明时加上 const 关键字。初始化 const 成员变量只有一种方法,就是通过构造函数的初始化列表,这点在前面已经讲到了,请猛击《C++初始化列表》回顾。 const成员函数(常成员函数) const 成员函数可以使用类中的所有成员变量,但是不能修改它们的值,这种措施主要还是为了保护数据而设置的。const 成员函数也称为常成员函数。 我们通常将 get 函数设置为常成员函数。
|
存储 编译器 C语言
C++:类和对象(中)---默认成员函数---运算符重载---const的含义
C++:类和对象(中)---默认成员函数---运算符重载---const的含义
类与对象中const修饰成员函数
类与对象中const修饰成员函数
56 0