将参数传递给基类构造函数C++

Jam*_*s B 1 c++ inheritance constructor class

我喜欢在C++中将我的类声明和定义分开.因此,在标题中我可以定义一个'基础'类,如下所示:

# Base.h
class Base 
{
    int n;    
public:
    Base(int x);
};
Run Code Online (Sandbox Code Playgroud)

并在cpp文件中定义其构造函数实现,即

# Base.c
Base::Base(int x) 
{
    n = x;
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我定义一个继承'base'类的'derived'类,我可以将参数传递给基类,如下所示:

#Derived.h
class Derived : public Base
{
    int t;
public:
    Derived(int y) : Base(t) {t = y;}
}
Run Code Online (Sandbox Code Playgroud)

但是这样做需要我将Derived类的构造函数的主体放在头文件中,即,{t = y;}因此构造函数定义不再与其声明分开.有没有办法将参数传递给类的基类构造函数,仍然允许我在cpp文件中定义派生类的构造函数?

Mar*_* A. 5

是的,在头文件中有:

class Derived : public Base
{
    int t;
public:
    Derived(int y); // Declaration of constructor
};
Run Code Online (Sandbox Code Playgroud)

而在cpp文件中:

Derived::Derived(int y) : Base(t) { // Definition of constructor
    t = y;
}
Run Code Online (Sandbox Code Playgroud)

成员初始化列表允许在类构造函数的定义中以及内联类内定义中.如果您感兴趣,我还建议您查看cppreference有关初始化顺序的两个小注意事项,以及在执行复合构造函数体之前初始化成员的事实.