关于类的成员函数,这句话如何理解呢
关于类的成员函数,这句话怎么理解呢在看C++ Primer,P369页,讲到类的成员函数时有这样一段话:引用成员函数
关于类的成员函数,这句话怎么理解呢
在看C++ Primer,P369页,讲到类的成员函数时有这样一段话:
对这句话不明白,“如果trans是一个Sales_item对象,则在avg_price函数内部对Sales_item类成员的引用就是对trans成员的引用。”,求解释,谢谢了! 成员函数
[解决办法]成员函数都有一个隐含的形参,this指针。
例如其实avg_price的原型是酱紫的。。
double avg_price(const Sales_item *const this);
你调用
trans.avg_price();
实际上就是把trans对象的指针作为实参
avg_price(&trans);
然后,avg_price函数里调用了Sales_item类的数据成员revenue, 实际上就是this->revenue, 也就是(&trans)->revenue.
[解决办法]Sales_item{
public:
double avg_pric(){
double av=0;
for(int i=0;i<20;i++)
{
av+= //this-> trans.avg_price()调用里,这个this就是 &trans;
price[i]; //在这个函数调用里 trans.avg_price(),运行到这里,
// 这里的 price 相当于trans.price
}return av/20;
};
double price[20];
}
Sales_item trans;//trans是一个Sales_item对象
double aver =trans.avg_price();//这里的trans 是隐藏的实参,传递的他的是地址。
换句话说应该这样写: avg_price( &trans);编译器就是这么干的
VC大概产生如下代码如下:
push ecx;
mov ecx,offset trans
call avg_price
.....
pop ecx
[解决办法]这句话其实很好懂,说明你基础知识还很差哦。“如果trans是一个Sales_item对象,则在avg_price函数内部对Sales_item类成员的引用就是对trans成员的引用。”就好像“你是一个中国人,对中国人的一些评价,也是对你的评价”。不知道你能否理解。如果还不能理解,建议楼主还是多翻翻书,花个几天时间认真看基础知识,这句话自然而然就明白了。
[解决办法]
class Sales_item
{
public:
Sales_item() : p1(3.4), p2(3.5)
{
}
double avg_price()
{
//在函数内, p1相当于trans.p1, p2相当于trans.p2
return (p1 + p2) / 2.0;
}
private:
double p1, p2;
};
Sales_item trans;
double result = trans.avg_price();
[解决办法]C++ Primer Fourth Edition(中英文对照阅读版).chm
看这本吧