gpt4 book ai didi

c++ - 如何在 switch 语句中正确初始化不同的派生类?

转载 作者:搜寻专家 更新时间:2023-10-31 00:51:37 24 4
gpt4 key购买 nike

我有如下代码,有一个基类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;
}

关于c++ - 如何在 switch 语句中正确初始化不同的派生类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54566143/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com