我写了一个测试程序:
Template Loader Error:
Django tried loading these templates, in this order:
Using loader django.template.loaders.filesystem.Loader:
Using loader django.template.loaders.app_directories.Loader:
该程序输出以下内容:
#include <iostream>
class base
{
public:
base()
{
std::cout << "base 1" << std::endl;
}
base(int a)
{
std::cout << "base a=" << a << std::endl;
}
};
class child : public base
{
public:
child()
{
std::cout << "child" << std::endl;
}
};
int main(int argc, char* argv[])
{
child c;
return 0;
}
有没有办法将一个整数参数发送到基类,从而调用基本构造函数的另一种形式?
如果base只有一个构造函数,我会得到一个编译错误:$ ./a.out
base 1
child
,正如您所料。但是如果我给那个构造函数赋一个默认参数,比如:
candidate expects 1 argument, 0 provided
然后我的程序编译并运行,输出:base(int a = 10)
。 (有趣的?)
有没有办法传递base a=10
的变量值?
答案 0 :(得分:5)
您可以在派生类
的构造函数的mem-initializer列表中调用基本构造函数 child() : base( 10 )
{
std::cout << "child" << std::endl;
}
另一种方法是在派生类
中使用声明class child : public base
{
public:
using base::base;
child()
{
std::cout << "child" << std::endl;
}
};
在这种情况下,派生类还将有一个带有参数的构造函数,该参数将使用基类的参数调用相应的构造函数。
这是一个示范程序
#include <iostream>
int main()
{
class base
{
public:
base()
{
std::cout << "base 1" << std::endl;
}
base(int a)
{
std::cout << "base a=" << a << std::endl;
}
};
class child : public base
{
public:
using base::base;
child()
{
std::cout << "child" << std::endl;
}
};
child c( 10 );
}
程序输出
base a=10
答案 1 :(得分:2)
您可以使用:
语法来调用非默认构造函数:
child() : base(1)