我有一个由超类定义的实例,但也有一个子类。被调用的函数是Super类中的函数,因为这与我的所有实例相同。但是,这个函数的结果应该由它们所在的子类定义。这是一个简化的例子:
class superClass{
public:
//the "called" function, should not create a value on its own (empty)
vector<int>vec(){...}
}
class subClass1:public superClass{
public:
//should set vector to the desired value when it is of type SubClass1
vector<int>vec(){...}
}
class subClass2:public superClass{
public:
//should set vector to the desired value when it is of type SubClass2
vector<int>vec(){...}
}
...
我不知道如何实际链接这些函数调用。该函数正确运行,因为每当我在superClass中直接赋值时,都可以打印。如果我尝试使用subClass,则会出现错误(因为尝试打印不存在的项目)。
非常感谢有关如何做到这一点的任何帮助。
答案 0 :(得分:0)
所以,比如:
class SuperClass
{
public:
virtual vector<int> vec() = 0;
};
class SubClass1 : public SuperClass
{
public:
virtual vector<int> vec()
{
vector<int> v;
...
return v;
}
};
class SubClass2 : public SuperClass
{
public:
virtual vector<int> vec()
{
vector<int> v;
...
return v;
}
};
或者,如果SuperClass不是抽象的,请将其实现为:
class SuperClass
{
public:
virtual vector<int> vec()
{
vector<int> v;
return v;
}
};
答案 1 :(得分:0)
virtual
功能是您正在寻找的功能。
使用virtual
前缀在超类中声明函数,然后每当调用该函数时,实际调用的重载将取决于实际对象的类型。