当前位置: 首页 > wzjs >正文

专做运动装的网站广州网页设计公司推荐

专做运动装的网站,广州网页设计公司推荐,百度百度一下百度,兰州企业网站一、什么是“this”? 简单来说,“this”是每个非静态成员函数隐含的指针,它指向调用该成员函数的那个对象本身。 换句话说,当你调用对象的方法时,编译器会自动传入一个指针,指向你调用的“那个对象”&…

一、什么是“this”?

简单来说,“this”是每个非静态成员函数隐含的指针,它指向调用该成员函数的那个对象本身

换句话说,当你调用对象的方法时,编译器会自动传入一个指针,指向你调用的“那个对象”,这个指针就是“this”。

比喻

把对象比作一辆车,“this”就像车内的一个标签,指向“这辆车自己”。每次在车内(成员函数中),你可以用“this”找到“自己”。


二、“this”的详细作用和用途

2.1 指向调用对象

  • 让成员函数知道“自己是谁”
  • 可以在成员函数中访问和修改调用者的成员

2.2 解决名字冲突

如果成员函数的参数和成员变量同名,会造成混淆。此时,用“this”可以明确区分:

class Person {
public:std::string name;void setName(const std::string& name) {this->name = name;  // 成员变量名 vs 参数名}
};

这里,this->name指成员变量,name是参数。

2.3 返回对象本身(链式调用)

“this”作为指针,可以用在函数返回值中,让函数支持链式调用(一个语句连续调用多个方法):

class Number {
public:int value;Number& setValue(int v) {this->value = v;return *this;  // 返回对象的引用}Number& add(int v) {this->value += v;return *this; }
};

这样就可以写:

Number n;
n.setValue(10).add(5);

2.4 在const成员函数中的使用

  • 在定义const成员函数时,不能修改对象的成员
  • 但可以用“this”作为“const 类型指针”:
class Example {
public:void display() const {// this 是 const指针:const Example*// 不能通过 this 修改成员}
};

2.5 判断两个对象是否相等

可以用“this”进行比较:

bool isEqual(const Person& p) {return this == &p;
}

三、“this”的底层实现原理

  • 每个非静态成员函数都会隐式带一个指针参数(隐藏参数)
  • 编译器会在调用成员函数时自动把调用的对象地址作为“this”传入
  • “this”在成员函数中象一个普通指针,可以用->访问成员
  • 这也是为什么成员函数定义时可以用this->member,实际上就是解指针访问

举个简单的例子: 

class Foo {
public:void bar() {// 实际编译后类似// void bar(Foo* this) { ... }}
};

四、例子演示

让我们写几个例子,帮你更直观理解:

例子1:解决名字冲突

#include <iostream>
class Person {
public:std::string name;void setName(const std::string& name) {this->name = name; // 使用this区分成员和参数}void print() {std::cout << "Name: " << this->name << std::endl;}
};
int main() {Person p;p.setName("Alice");p.print();  // 输出:Name: Alice
}

例子2:链式调用

#include <iostream>
class Counter {
public:int value = 0;Counter& increment() {this->value++;return *this;  // 返回自身引用}Counter& add(int v) {this->value += v;return *this;}void show() {std::cout << "Counter: " << this->value << std::endl;}
};
int main() {Counter c;c.increment().add(10).increment().show();  // 链式调用
}

例子3:判断对象是否相等

#include <iostream>
class Person {
public:std::string name;bool isSame(const Person& p) {return this == &p; // 比较指针是否相等}
};
int main() {Person p1{"Tom"};Person p2{"Tom"};std::cout << p1.isSame(p2) << std::endl; // false
}

五、总结与注意事项

  • **“this”**始终指向调用的对象
  • 在成员函数中可用,但不能在静态成员函数中使用
  • 常用于名字冲突解决和链式调用
  • 使用“*this”可以获得“对象本身”,但要小心存储或返回对象引用,避免悬空指针或引用(比如返回“this”的引用时,必须保证调用者不要销毁对象)

文章转载自:

http://Xpzkev6t.nqfqj.cn
http://5OxZCacx.nqfqj.cn
http://OEd0lBWx.nqfqj.cn
http://y7SH5GB6.nqfqj.cn
http://f6PH0Ds4.nqfqj.cn
http://qogF7axI.nqfqj.cn
http://1CsEjd4v.nqfqj.cn
http://PmfrFllF.nqfqj.cn
http://jTnxgseN.nqfqj.cn
http://ZpUqpuKQ.nqfqj.cn
http://xgWN2Tbh.nqfqj.cn
http://gh3uy3Cy.nqfqj.cn
http://ZtvpfXoG.nqfqj.cn
http://tm62qkR3.nqfqj.cn
http://ev4BQOwJ.nqfqj.cn
http://28KKG5ez.nqfqj.cn
http://Cc3C5dIe.nqfqj.cn
http://gum7Wj9i.nqfqj.cn
http://mz92w7YZ.nqfqj.cn
http://SXbihNUd.nqfqj.cn
http://6QQOPqBi.nqfqj.cn
http://TXFqWRLZ.nqfqj.cn
http://OQWpVh6m.nqfqj.cn
http://sGgfpvqo.nqfqj.cn
http://qBd8T7Uw.nqfqj.cn
http://RotGABac.nqfqj.cn
http://gWoEJPbu.nqfqj.cn
http://h0cm0Qyp.nqfqj.cn
http://Hj7tMPsC.nqfqj.cn
http://JU78ut5Q.nqfqj.cn
http://www.dtcms.com/wzjs/763558.html

相关文章:

  • 商务网站建设总结怎么做网页跳转
  • html5手机wap网站模板北京网页设计
  • 做html网站建筑公司愿景口号大全
  • 网站访问速度优化工具dede模板蓝色大气简洁企业网站模板下载
  • 怎么做自己的音乐网站招聘网站源码下载
  • 伊川网站建设宝贝我想跟你做网站
  • 建设网站域名免费公司起名字大全
  • 品质好的衣服品牌三秦seo
  • Myeclipse怎么做网站网站文档怎么加图片不显示
  • 哪个网站可以做英文兼职网站建设行业产业链分析
  • 网站建设企业排名推广我要建一个网站
  • 北京撒网站设计网站零基础学电脑培训班
  • ps做网站效果图制作过程效果图官网
  • 运动鞋网页ui设计南通网站建设优化公司
  • seo网站排名优化公司建设银行怎么从网站上改手机号码
  • 漂亮网站首页 html后台html模板
  • 建设网站的公司swot网站的标志是什么字体
  • 没有网站怎么做百度优化做招聘网站还有法盈利吗
  • 学校网站建设都是谁做的哪个网站做相册好
  • 有没有教做韩餐的网站wordpress 科技类主题
  • 平台网站模板重庆最著名的十大景点
  • flash素材网站Wordpress访问速度代码
  • 论坛网站建设视频电子商务主要课程
  • 网站建设如何加入字体青岛开发区建网站公司
  • 玉溪市建设厅官方网站深圳好看的公司网站
  • 湖南火电建设有限公司招标网站游戏推广引流软件
  • 专门做辅助的网站可爱风格网站
  • 汇云网站建设wordpress 取消标志
  • 电子商务网站建设估算住房建设部官方网站专家注册
  • 网站后台视频教程免费的h5