c++ - 如何在switch语句中正确初始化不同的派生类?
问题描述
我有如下代码,有一个基类Base的类层次结构,还有几个派生类Derived1、Derived2、Derived3……等等。
switch(i){
case 1:{
Derived1* d1;
generateD1(d1);
otherFunc(d1); //function signature is otherFunc(Base*)
break;
}
case 2:{
Derived2* d2;
generateD2(d2);
otherFunc(d2);
break;
}
... //goes on for many cases
}
如何使用继承机制来改进上述代码?
解决方案
像这样的东西:
class Base
{
public:
virtual ~Base() {}
virtual void generate() = 0 {}
virtual void other() = 0 {}
};
class Derived1 : public Base
{
public:
virtual void generate() override {}
virtual void other() override {}
};
class Derived2 : public Base
{
public:
virtual void generate() override {}
virtual void other() override {}
};
int main()
{
int i;
Base *b;
switch(i)
{
case 1:
b = new Derived1;
break;
case 2:
b = new Derived2;
break;
...
}
b->generate();
b->other();
...
delete b;
return 0;
}
您可以删除该generate()
方法并仅使用构造函数:
class Base
{
public:
virtual ~Base() {}
virtual void other() = 0 {}
};
class Derived1 : public Base
{
public:
Derived1() {}
virtual void other() override {}
};
class Derived2 : public Base
{
public:
Derived2() {}
virtual void other() override {}
};
int main()
{
int i;
Base *b;
switch(i)
{
case 1:
b = new Derived1;
break;
case 2:
b = new Derived2;
break;
...
}
b->other();
...
delete b;
return 0;
}
推荐阅读
- html - 滚动块 HTML
- .net - Rest Api 标头授权
- java - 通过 jdeveloper 12.2.1.4 IDE 在 weblogic 服务器上部署 Springboot 应用程序
- javascript - 如何将类组件转换为函数组件
- java - 澄清字符编码的工作原理
- python - Pyomo Constraint iteration for Optimal Power Flow
- reactjs - React Navigator 5; Tab Navigator and Stack Navigator
- unity3d - Unity Shader Graph, UV Map decomposition to use as opacity gradient
- python - Timedelta returned by tzinfo object
- sql - SuiteQL cannot includes keyword 'DISTINCT'?