首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于类的成员函数,这句话如何理解呢

2013-05-02 
关于类的成员函数,这句话怎么理解呢在看C++ Primer,P369页,讲到类的成员函数时有这样一段话:引用成员函数

关于类的成员函数,这句话怎么理解呢
在看C++ Primer,P369页,讲到类的成员函数时有这样一段话:

引用
成员函数有一个附加的隐含实参,将函数绑定到调用函数的对象--当我们编写下面函数时:
trans.avg_price()
就是在调用名为trans对象的avg_price()函数。如果trans是一个Sales_item对象,则在avg_price函数内部对Sales_item类成员的引用就是对trans成员的引用。

对这句话不明白,“如果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
看这本吧

热点排行