一般理解类的私有成员变量不能通过对象直接进行访问,需要借助公有成员函数对其进行相关的操作.但是有一类情况可以直接通过对象对私有成员变量进行访问.
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).封装是编译期的概念,是针对类型而非对象的,在类的成员函数中可以访问同类型实例对象的私有成员变量.
(2).在编译器遇到total_val变量时,将会在其所属对象s所属的类域中查找该符号,既然查找的是类域,由于topval函数属于stock类,topval函数可以访问stock类中的所有变量,所以topval函数可以找到s.total_val.