【发布时间】:2020-06-20 21:43:11
【问题描述】:
我有一个项目,我正在使用指向父类的指针访问多个类。我需要知道指针所指的是哪个子类,所以我将一个不同的整数 ID 号添加到每个子类作为常量类变量。
我需要使用指针访问这个变量,所以我为那个变量写了一个getter函数。由于 getter 函数的代码对于所有子类都是相同的,因此我尝试在父类中定义该函数。这大致导致了下面的代码:
class Parent {
public:
virtual void func();
// Getter function
uint8_t getID() {
return classID;
}
// Set ID to a default value
const uint8_t classID = 0;
};
// One of many child classes
class A: public Parent {
public:
void func() {//do something}
const uint8_t classID = 1;
};
int main(){
Parent* childPointer = new A;
uint8_t currentID = childPointer -> getID();
}
但是,运行它会导致 currentID 等于 Parent.classID 而不是 A.classID。
将getID 函数设为虚函数并在每个子类中定义它可以使其按预期工作,但这会导致大量重复代码。我想知道是否有办法在 Parent 类中定义一次 getter 函数,并使其返回正确的值?否则,有没有更清洁的方法呢?
【问题讨论】:
标签: c++ class oop polymorphism parent-child