c++ - 如何干净地编写我的虚函数
问题描述
我对 c++ 相当陌生,并且正在学习如何编写干净的代码。我想重写下面的derived1mngr 和derived2mngr 类中的函数manage()。这两个函数的代码是通用的,唯一的区别是用于调用代码的对象类型。我不想在derived1mngr 和derived2mngr 中复制相同的代码。有什么建议会有所帮助吗?我如何在基类管理中将代码组合在一起?
class Base{
public:
virtual void handle(){
cout<< "handle base";
....//do something
}
void fn1() {...}
.....
void fn10() {...}
};
class D1: public Base{
public:
void handle(){
Base::handle();
cout<< "D1 handle";
....//do something
}
};
class D2: public Base{
public:
void handle(){
Base::handle();
cout<< "D2 handle";
....//do something
}
};
class basemngr {
public:
virtual void manage() {
}
void callA() {....};
void callB() {...};
};
class derived1mngr: public basemgr{
public:
void manage() {
D1 d1;
d1.handle();
d1.fn1();
d1.fn2();
if ( d1.fn3()) {
callA();
}
if ( d1.fn4()) {
callB();
}
}
};
class derived2mgr{
public:
void manage() {
D2 d2;
d2.handle();
d2.fn1();
d2.fn2();
if ( d3.fn3()) {
callA();
}
if ( d2.fn4()) {
callB();
}
}
};
int main ()
{
basemgr* d1m = new derived1mgr();
d1m-> manage();
}
解决方案
沿着这些思路,也许:
class basemngr {
public:
virtual void manage() {
}
void manageImpl(Base& b) {
b.handle();
b.fn1();
b.fn2();
// ...
}
void callA() {....};
void callB() {...};
};
class derived1mngr: public basemgr{
public:
void manage() {
D1 d1;
manageImpl(d1);
}
};
推荐阅读
- javascript - 我尝试为 createUser 创建一个可调用函数,但运行它时出现错误,我不知道为什么
- google-play - Google 因欺骗性广告政策拒绝了我的应用
- internationalization - 有没有办法在没有 Next.js 国际化路由的情况下使用 next-i18next?
- react-native - TypeError:StyleSheet.create 不是函数(在 's.StyleSheet.create({icon:{backgroundColor:"transparent"}})'
- c# - 如何仅从与 .csv 中的文件名匹配的目录中复制文件
- ml.net - Microsoft ML.Net 不会将模型保存到磁盘
- r - 如何从存储在使用 tidyr 包构建的数据框中的列表中获取特定元素和子元素?
- java - 长整数中的 Java 整数溢出积
- java - 如何保存共享偏好的通知?
- python - 为什么迁移学习的输出不断变化?