以下片段让我感到困惑。 为什么der._x ++正确? 因为它是从Derived参数复制的临时局部变量。 它应该只能访问公共成员。 注释声明bs._x ++不能传递哪个应该是正确的。 请让我知道我误解的地方!提前谢谢!
谢谢你的回答。但我怀疑的是,der是从参数复制的Derived对象,换句话说,它应该被视为使用初始化的Derived对象的客户端。它不是* this实例,而是另一个由复制构造函数生成的临时实例。
class Base
{
public:
Base(int x, int y) :_x(x), _y(y){}
protected:
int _x, _y;
};
class Derived :public Base
{
public:
Derived(int x, int y,int z) :Base(x,y), _z(z){}
void mem1(Base bs, Derived der) //copy constructor called. Derived::Derived(const Derived &)
{
der._x++;
//bs._x++;
_x++;
}
private:
int _z;
};
int main()
{
Derived der(6,4,3), der1(5,3,2);
Base bs(-5,-4);
der1.mem1(bs, der);
return 0;
}
答案 0 :(得分:0)
der._x++
可访问,因为_der
是同一Derived
类的对象,而您正在访问{{1}来自_x
类的内部。
当你在一个类中时,你可以访问它的成员(有或没有对象引用)。否则{}禁止使用Derived
,而不是:)
但是你不能对(*this)._x
的任何其他类做同样的事情,因此不允许这样做。
bs._x++
在很大程度上依赖于该语言的这一特性来实现它们。另外不要忘记Friends
没有它就无法实现(因为你从类中调用它的Singleton
)。