Просто мне нужно сделать так, как сказано в названии: вызвать дочерний статический метод из родителя. Проблема в том, что я не знаю имя дочернего класса в родительском, поскольку может быть несколько детей. Статический метод должен оставаться статичным. Например:C++: вызов дочернего статического метода из родителя
class A{ // parent class
public:
void process(){
getData(); // <-- Problem
}
}
class B: public A{ // child class
static int getData();
}
void main(){
B b;
b.process();
}
Одним из решений, которое приходит на ум, является наличие виртуального метода, который вызывает статический метод. Это не было бы очень хорошо, и это означало бы, я должен был бы реализовать метод для каждого ребенка, у меня есть:
class A{ // parent class
virtual int getDataFromStaticMethod() = 0;
public:
void process(){
getData(); // <-- Problem
}
}
class B: public A{ // child class
static int getData();
virtual int getDataFromStaticMethod(){
return B::getData();
}
}
void main(){
B b;
b.process();
}
Но я действительно хочу это было возможно осуществить чисто виртуальный метод с помощью статического метода:
class A{ // parent class
virtual int getData() = 0;
public:
void process(){
getData(); // <-- Problem
}
}
class B: public A{ // child class
static int getData();
}
void main(){
B b;
b.process();
}
Любые предложения?
Спасибо!
Что произойдет, если два дочерних класса реализуют этот статический метод 'getData'? Какой из них вы хотите назвать? – yzt
Рекомендация: Не используйте статическую функцию. Разница статической и нестатической функции заключается в том, что нестатическая функция может быть вызвана только тогда, когда известен экземпляр класса (этот указатель). В вашем случае кажется, что у вас всегда есть экземпляр, поэтому вы можете использовать нестатические функции. Или есть какая-то причина для статической функции, которую я пренебрегал? –
@yzt Если у меня есть два класса B и C, которые оба наследуют A, я бы хотел вызвать статический метод B при вызове b.process() и статического метода C при вызове c.process(). Или вы имели в виду особый случай с множественным наследованием? – StackOverflowUser