我有一个抽象类及其派生类。
我想在抽象类中拥有一个成员(即fDerivedName),其中包含派生类的名称。
在每个派生类的构造函数中,我做了:
public ActionResult GenerateExcelReport(FilterParams args)
{
byte[] results = GenerateLargeExcelReportThatTake30Seconds(args);
return File(results, @"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml", "MyReport.xlsx");
}
有一种方法可以避免在每个派生类中重新实现它吗?
由于
答案 0 :(得分:1)
您可以在基类中实现构造函数(然后不再是纯抽象),将派生类的名称作为参数传递,并在构造函数的初始化列表中执行赋值:
class Base
{
public:
Base( const std::string& derived_class_name):
fDerivedName( derived_class_name)
{
}
...
};
但是,当然,您仍然必须从派生类的每个构造函数中调用此基类构造函数。你必须将类名作为参数传递,你不能将它作为参数传递给你。调用由派生类重载的虚函数ClassName()
。