class A{A&Getobj(){return*this}}里&不是表示Getobj是一个A类吗?还有A&Getobj(){return *this}啥意思

如题所述

第1个回答  2019-05-09
这个想用几句话就说清楚有点困难。&表示引用,在c语言里也经常使用,比如用于scanf函数。这是基础,弄明白了再往后看。在参数的传递过程中,或函数的返回过程中,如果使用了引用,意味着变量自身(或者等价地说这个变量在内存中的地址),而不是它的一个复制品被传递到了函数中。传递变量的自身开销很小,因为只需要传递这个变量在内存中的地址就够了,但要传递类对象的复制品,就要把类中的所有成员,都复制到函数使用的堆栈上,开销很大。这就是&的基本含义和运用。再来看this,它是指向类(对象)自身的一个指针。每个类对象在内存中被创建后,都有一个指向它自己的this指针。其他类型的指针,如int *p,p指向整型,故*p表示一个整数值,同理,this指向类对象,*this也就代表对象自身了。return *this就是把类对象自己作为函数的返回值返回去了。以上代码的作用是,类A的一个对象调用了Getobj函数后,函数原封不动地返回了对象自身(在内存中的地址)。你要是连Getobj都看不出是一个函数,说明基础有待加强追问

我基础是真滴不行啊,我还有个问题:这个问题基础上A a;a.Getboj=5;//为什么一个函数就能直接等于一个确定的数字?

追答

这个Getboj不像函数,倒像是成员变量。把这个类A的定义贴出来吧

追问

class A {

public:
int val;
A(int n=0){val=n;}
int& GetObj(){return val;};
};
main() {
A a;
cout << a.val << endl;
a.GetObj()= 5;
cout << a.val << endl;
}

追答

a.GetObj() = 5,这句代码执行了两步操作,第一步先计算GetObj(), 它返回的是类A的成员val的引用,第二步执行一个赋值,所以这句话相当于a.val = 5。下一行的cout输出时a.val值就变为5了,而前一行的a.val值为0

追问

谢谢大佬!我懂了QAQ

本回答被网友采纳
相似回答