相关疑难解决方法(0)

在构造函数中调用虚函数

假设我有两个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.为什么?

c++ constructor overriding virtual-functions

220
推荐指数
6
解决办法
9万
查看次数

什么时候在构造函数和析构函数中调用this->是安全的

到目前为止,我还没能找到一个确凿的答案.何时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)

以上哪些案件合法?

注意:我知道上面的许多做法都是不可取的.

c++ constructor destructor c++11

33
推荐指数
3
解决办法
3万
查看次数