一般理解類的私有成員變量不能通過對象直接進(jìn)行訪問,需要借助公有成員函數(shù)對其進(jìn)行相關(guān)的操作.但是有一類情況可以直接通過對象對私有成員變量進(jìn)行訪問.
class stock{
private:
double total_val ;
public:
stock(double num);
stock topval(stock s);
};
stock::stock(double num)
{
total_val = num;
}
stock stock::topval(stock s)
{
if (s.total_val > total_val)
return s;
else
return *this;
}
int main()
{
stock a(10), b(11),c(1);
c = a.topval(b);
return 0;
}
在if (s.total_val > total_val)中就直接使用對象s訪問了其私有成員變量total_val,原理為:
(1).封裝是編譯期的概念,是針對類型而非對象的,在類的成員函數(shù)中可以訪問同類型實(shí)例對象的私有成員變量.
(2).在編譯器遇到total_val變量時(shí),將會(huì)在其所屬對象s所屬的類域中查找該符號(hào),既然查找的是類域,由于topval函數(shù)屬于stock類,topval函數(shù)可以訪問stock類中的所有變量,所以topval函數(shù)可以找到s.total_val.