lesson2(补充)关于const成员函数

简介: lesson2(补充)关于const成员函数

前言:

将const修饰的成员函数称之为const成员函数const修饰类成员函数,实际修饰该成员函数 隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改。

class Date
{
public:
  Date()
    :_year(2023)
    ,_month(10)
    ,_day(28)
  {}
  void print() const   //const限定this指针,相当于const Date* this
  {
    cout << _year << "-" << _month << "-" << _day << endl;
  }
private:
  int _year;
  int _month;
  int _day;
};
int main()
{
  Date a;
  a.print();
  return 0;
}

思考下面的几个问题:

1. const对象可以调用非const成员函数吗?

class Date
{
public:
  Date()
    :_year(2023)
    ,_month(10)
    ,_day(28)
  {}
  void print1() const   //const限定this指针,相当于const Date* this
  {
    cout << _year << "-" << _month << "-" << _day << endl;
  }
  void print2()
  {
    cout << _year << "-" << _month << "-" << _day << endl;
  }
private:
  int _year;
  int _month;
  int _day;
};
int main()
{
  Date a;
  a.print1();
  const Date b;
  b.print1();
  return 0;
}

编译器甚至都没有给出print2这个函数的选项,答案自然是不能,但为什么不能呢?

我们定义的对象b是const类型,他的成员变量不能做修改,那他的别名的成员变量也不能修改,而我们上述代码中b对象不能调用print2函数是因为print2函数有权限放大,所以不能调用。

2. 非const对象可以调用const成员函数吗?

 

class Date
{
public:
  Date()
    :_year(2023)
    ,_month(10)
    ,_day(28)
  {}
  void print1() const   //const限定this指针,相当于const Date* this
  {
    cout << _year << "-" << _month << "-" << _day << endl;
  }
  void print2()
  {
    cout << _year << "-" << _month << "-" << _day << endl;
  }
private:
  int _year;
  int _month;
  int _day;
};
int main()
{
  Date a;
  a.print1();
  const Date b;
  b.print1();
  Date c;
  c.print2();
  return 0;
}

 

权限放大不可以,但可以有权限的缩小,c对象成员变量可以修改,也可以不修改,他的别名成员变量不可以修改是合理的。

3. const成员函数内可以调用其它的非const成员函数吗?

4. 非const成员函数内可以调用其它的const成员函数吗?

这里是权限的缩小,是OK的


目录
相关文章
|
9月前
|
安全 编译器 Linux
【C++练级之路】【Lv.1】C++,启动!(命名空间,缺省参数,函数重载,引用,内联函数,auto,范围for,nullptr)
【C++练级之路】【Lv.1】C++,启动!(命名空间,缺省参数,函数重载,引用,内联函数,auto,范围for,nullptr)
100 0
|
5月前
|
C++
C++(十九)new/delete 重载
本文介绍了C++中`operator new/delete`重载的使用方法,并通过示例代码展示了如何自定义内存分配与释放的行为。重载`new`和`delete`可以实现内存的精细控制,而`new[]`和`delete[]`则用于处理数组的内存管理。不当使用可能导致内存泄漏或错误释放。
|
C++
C++中关于const的一些使用惯例
大家都知道,C++的const关键字是申明一个常量,以前没有深入接触C++的时候也没觉得有什么特别的用法。 下面说说我最近工作中发现的关于const的一些使用惯例,我这里所说的使用惯例,是指C++编码中推荐的做法。
60 0
|
9月前
lesson2(补充)关于>>运算符和<<运算符重载
lesson2(补充)关于>>运算符和<<运算符重载
35 0
|
9月前
|
编译器
lesson2(补充)取地址及const取地址操作符重载
lesson2(补充)取地址及const取地址操作符重载
46 0
|
存储 编译器 C语言
C++:类和对象(中)---默认成员函数---运算符重载---const的含义
C++:类和对象(中)---默认成员函数---运算符重载---const的含义
|
程序员 C语言
assert断言与const修饰指针的妙用(模拟实现strcpy函数)
assert断言与const修饰指针的妙用(模拟实现strcpy函数)
|
编译器 C语言 C++
|
存储 编译器 C语言
|
程序员 C语言
const用法,区别const int*和int* const(顺便用图片教你看懂所有C语言变量类型声明)
const用法,区别const int*和int* const(顺便用图片教你看懂所有C语言变量类型声明)
const用法,区别const int*和int* const(顺便用图片教你看懂所有C语言变量类型声明)