【发布时间】:2017-02-07 19:31:46
【问题描述】:
如何在一个函数中编写这 3 个成员函数定义?如果可能的话。你能解释一下你是怎么做到的吗?。对不起,我英语不好,也不擅长编码,请不要侮辱我。
void insert(int idx, PW* obj)
{
idx--;
double bd = summaryCost();
node x(1);
x.p = obj;
if (bd + obj->getCost() <= budget) {
if (idx <= vec.size()) {
vec.insert(vec.begin() + idx, x);
remain -= obj->getCost();
} else {
delete obj;
throw IndexOut();
}
} else {
delete obj;
throw DeficitError();
}
}
void insert(int idx, FW* obj) {
idx--;
double bd = summaryCost();
node x(2);
x.f = obj;
if (bd + obj->getCost() <= budget) {
if (idx <= vec.size()) {
vec.insert(vec.begin() + idx, x);
remain -= obj->getCost();
} else {
delete obj;
throw IndexOut();
}
} else {
delete obj;
throw DeficitError();
}
}
void insert(int idx, TW* obj) {
idx--;
double bd = summaryCost();
node x(3);
x.t = obj;
if (bd + obj->getCost() <= budget) {
if (idx <= vec.size()) {
vec.insert(vec.begin() + idx, x);
remain -= obj->getCost();
} else {
delete obj;
throw IndexOut();
}
} else {
delete obj;
throw DeficitError();
}
}
【问题讨论】:
-
什么意思?我看到你有三种方法,它们基本上用不同的参数做同样的事情。您是否只需要一种方法来执行此操作?
-
是的,我需要一个方法来做这个
-
我们看不到
TW、FW和PW的定义,所以这里有多种选择。模板方法或直接使用所有这 3 种类型的共同祖先的继承。 -
您可以只创建一个函数,将所有三个 TW、FW 和 PW 作为参数。根据对象类型,执行代码块。
-
我认为继承会更好。我试过了,但我做不到。这是日程表标题中的代码link