假设我有两个C++类:
class A
{
public:
A() { fn(); }
virtual void fn() { _n = 1; }
int getn() { return _n; }
protected:
int _n;
};
class B : public A
{
public:
B() : A() {}
virtual void fn() { _n = 2; }
};
Run Code Online (Sandbox Code Playgroud)
如果我写下面的代码:
int main()
{
B b;
int n = b.getn();
}
Run Code Online (Sandbox Code Playgroud)
人们可能期望将n其设置为2.
事实证明,n设置为1.为什么?
到目前为止,我还没能找到一个确凿的答案.何时this->从对象内调用是安全的.特别是从构造函数和析构函数内部.
而且,在使用公共继承时.使用向上和向下转换此调用的结果是否安全?
例如:
class foo
{
foo():
a(),
b(this->a)//case 1
{
this-> a = 5; //case 2
}
int a;
int b;
};
class bar: public baz
{
bar():
baz(this)//case 3 - assuming baz has a valid constructor
{
}
}
Run Code Online (Sandbox Code Playgroud)
最后是最不可能的一个
foo()
{
if(static_cast<bar*>(this));//case 4
}
Run Code Online (Sandbox Code Playgroud)
以上哪些案件合法?
注意:我知道上面的许多做法都是不可取的.