【发布时间】:2016-05-31 07:56:14
【问题描述】:
我有以下基类:
class node_layer_manager_t : public layer_manager_t
{
protected:
//Devices
trx_t trx;
private:
std::vector<string> trx_dump_labels;
public:
node_layer_manager_t( xml::node_t& params );
~node_layer_manager_t();
virtual bool set_profile(void) override;
}
我创建了以下派生类:
class node_layer_manager_with_rad_t : public node_layer_manager_t
{
protected:
//Devices
radio_t radio;
public:
node_layer_manager_with_rad_t(xml::node_t& params );
~node_layer_manager_with_rad_t();
virtual bool set_profile(void) override;
virtual void radio_monitoring_job_function(void);
intervalues_t<double> radio_tmp;
ushort duration_seconds_for_radio_monitoring;
};
我想要它,以便设置配置文件将执行基类的 set_profile 以及其他一些操作。
我可以这样写吗?
bool node_layer_manager_with_rad_t::set_profile(void)
{
bool success;
node_layer_manager_t::set_profile();
try
{
string_t profile_tag = "logs/trx_dump/node:"+get_id();
dev_tx = profile->get_decendant(profile_tag.c_str());
cout<<"sarit id= "<< get_id()<<endl;
success = true;
}
catch(...)
{
cout<<"sarit profile error: "<<endl;
success = false;
}
return success; //**
}
**或者我应该重复以下内容:
return (success && node_layer_manager_t::set_profile());
【问题讨论】:
-
这是关于 C++ 还是关于您的特定设计的问题?如果是前者,您只应该编写一个不违反语言规则的程序。在这方面,您的两个变体看起来都不错。如果是后者,如果不完全了解设计,任何人都不可能有任何想法。试探性地,第二个变体看起来更有希望(虽然在 setter 中打印看起来很可疑)。
标签: c++11 inheritance