C++ this指针与const成员函数

C++ this指针与const成员函数
this指针
每个对象拥有一个this指针,通过this指针来访问自己的地址。

this指针并不是对象的一部分,this指针所占的内存大小是不会反应在sizeof操作符上的。

this指针只能在成员函数中使用,全局函数、静态函数都不能使用this指针

*在普通成员函数中,this是一个指向非const对象的const指针(如类类型为Student,那么this就是Student const类型的指针);
在const成员函数中,this指针是一个指向const对象的const指针(如类类型为Student,那么this就是const Student * const类型的指针)

this指针在成员函数开始执行前构造,在成员函数执行结束后销毁。

const对象与const成员函数
在成员函数参数列表后面加上const修饰,表示函数内this指针是一个指向常量对象的指针,不能修改成员变量。

void Person::setName(string name) const
{
    this->name = name;
} //错误,const成员函数不能修改成员变量

一个const成员函数如果以引用的形式返回*this,那么它的返回类型是常量引用

对于const对象或者const对象的引用和指针,对象内的成员变量是不能修改的,因此只能调用const成员函数,不会修改成员变量
对于非const对象,既可以调用const成员函数,也可以调用非const成员函数。

int Person::getId()const
{
    return this->id;
}
string Person::getName()
{
    return this->name;
}
const Person p(1,"yuewenlong");
p.getId();    //正确,getId为const成员函数
p.getName();  //错误,p为const对象,不能调用非const成员函数
const Person p1(2,"dengqilong");
p.getId();    //正确,普通对象可以调用const成员函数
p.getName();  //正确,普通对象可以调用非const成员函数

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++ ,this 指针是一个隐含于每个非静态成员函数指针,它指向调用该函数的对象。 下面是一个示例: ```cpp #include <iostream> class MyClass { public: void printAddress() { std::cout << "Address of this pointer: " << this << std::endl; } }; int main() { MyClass obj1, obj2; obj1.printAddress(); obj2.printAddress(); return 0; } ``` 输出: ``` Address of this pointer: 0x7fff5fbff6b7 Address of this pointer: 0x7fff5fbff6b6 ``` 在上面的示例,我们定义了一个名为 MyClass 的类,并在其定义了一个名为 printAddress 的成员函数,该函数输出 this 指针的地址。在 main 函数,我们创建了两个 MyClass 对象 obj1 和 obj2,并对它们都调用了 printAddress 函数。输出结果显示,这两个对象的 this 指针指向的地址是不同的,这是因为它们是不同的对象。 this 指针的应用非常广泛,其一个常见的用法是在成员函数返回对象本身的引用,即 `return *this;`。这在编写链式调用的代码时非常方便,例如: ```cpp class MyClass { public: MyClass& setValue(int value) { this->value = value; return *this; } MyClass& setName(const std::string& name) { this->name = name; return *this; } private: int value; std::string name; }; int main() { MyClass obj; obj.setValue(10).setName("example"); return 0; } ``` 在上面的示例,我们定义了两个成员函数 setValue 和 setName,它们都返回对象本身的引用,这样我们就可以使用链式调用来设置对象的值。在 main 函数,我们创建了一个 MyClass 对象 obj,并对它使用了两个成员函数

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值