C++:使用计算参数调用基类构造函数

cls*_*udt 6 c++ oop constructor

这个简单的例子演示了用于调用基类构造函数的C++语法 - 据我所知,它是一个C++学习器:

class BaseClass {
protected:
  int i;
public:
  BaseClass(int x) { 
     i = x; 
  }
};

class DerivedClass: public BaseClass {
  int j;
public:
  DerivedClass(int x, int y): BaseClass(y) { 
     j = x; 
  }
Run Code Online (Sandbox Code Playgroud)

这里,基类构造函数可以将派生类构造函数的命名参数作为输入.

现在,如果我想调用BaseClass()带有不是直接输入的输入值的构造函数,该DerivedClass()怎么办?基本上,我想在内部xy内部进行一些多线工作DerivedClass(),然后将计算值传递给BaseClass().这可以用构造函数完成吗?这应该用某种初始化方法来完成吗?

ere*_*eOn 11

你可以这样做,是的:

class BaseClass
{
  public:
    BaseClass(int x) : i(x) {}

  private:
    int i;
};

class DerivedClass: public BaseClass
{
  public:
    DerivedClass(int x, int y):
      BaseClass(compute(x, y)), // Neither i or j are initialized here yet
      j(x)
      {}

  private:
    static int compute(int a, int b) { return a + b; } // Or whatever
    int j;
};
Run Code Online (Sandbox Code Playgroud)

请注意,您甚至可以compute()创建非静态方法,但请注意,DerivedClass或者在调用时不会初始化BaseClass成员.所以你将无法依赖他们的价值观.