gpt4 book ai didi

c++ - 如何让一些派生类使用相同的方法,而另一些派生类使用另一个?

转载 作者:行者123 更新时间:2023-11-27 23:03:16 25 4
gpt4 key购买 nike

考虑以下继承层次结构:

class A{};
class X1:A{};
class X2:A{};
class Y1:X1{};
class Y2:X2{};
class Z1:X1{};
class Z2:X2{};

X层可能还有更多的类比如class X3:A{};...
每个 X?类有两个派生类Y?和Z?
我需要添加一个方法,所有 Y1...Yn 实例都执行相同的操作,并且所有 Z1...Zn 实例都使用另一个方法实现。
这是一个非公共(public)方法,由类A中的方法调用。
有没有优雅的方式来完成这个任务?

最佳答案

如果公共(public)继承是可接受的,那么您可以定义父类,并在您的派生类中有指向这些类的指针:

#include <iostream>

using namespace std;

class A
{
// A cannot be abstract - it must be able to invoke a
// "non-public method" whose implementation varies based on Y vs Z
public:
virtual void myFun()=0;
void callMyFun(){myFun();}
};

class Y
{
public:
void myFun(){cout<< "myFun from Y superclass" << endl;}
};

class Z
{
public:
void myFun(){cout<< "myFun from Z superclass" << endl;}
};

class X1:public A{};
class X2:public A{};
class Y1:X1{
Y* y;
void myFun(){y->myFun();}
};
class Y2:public X2{
Y* y;
void myFun(){y->myFun();}
};
class Z1:public X1{
Z* z;
void myFun(){z->myFun();}
};
class Z2:public X2{
Z* z;
void myFun(){z->myFun();}
};

int main()
{
Y2 myY2;
myY2.callMyFun(); // myFun from Y superclass
}

关于c++ - 如何让一些派生类使用相同的方法,而另一些派生类使用另一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25679233/

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