有没有办法实现抽象类的实现,它是C++中其他抽象类的多重继承?
我有两个“接口”类:AbstractAccess和AbstractPrint,AbstractRun类继承它们并使用它们的方法。 另外,我有两个接口的实现:AbstractAccess的访问器和AbstractPrint的打印有没有办法实现抽象类的实现,它是C++中其他抽象类的多重继承?,c++,abstract-class,multiple-inheritance,C++,Abstract Class,Multiple Inheritance,我有两个“接口”类:AbstractAccess和AbstractPrint,AbstractRun类继承它们并使用它们的方法。 另外,我有两个接口的实现:AbstractAccess的访问器和AbstractPrint的打印 有没有办法将AbstractRun中的接口强制转换为它们的实现,或者创建只使用AbstractRun的“Run”方法但带有实现接口的实现类Run?虽然您已经解决了问题,但我进一步研究了这个问题,我想澄清一些关于继承的困惑 当您的a类与另一个类具有is关系时,将使用继承。派
有没有办法将AbstractRun中的接口强制转换为它们的实现,或者创建只使用AbstractRun的“Run”方法但带有实现接口的实现类Run?虽然您已经解决了问题,但我进一步研究了这个问题,我想澄清一些关于继承的困惑 当您的a类与另一个类具有is关系时,将使用继承。派生类应该是继承自的类的替换 在您的例子中,您可以放心地说类Print是类AbstractPrint,而类访问同样是类AbstractPrint,因此继承在这里很好 另一方面,类AbstractRun不是AbstractPrint,也不是AbstractAccess。AbstractRun只处理/组合AbstractPrint和AbstractAccess。这种关系应该通过聚合或组合进行抽象,因为AbstractRun有一个指向AbstractRun和AbstractPrint的引用/指针。这将使AbstractRun变得具体,所以让我们将其重命名为Runner 现在可以像以前一样定义访问和打印 但我们也要改进这些方面:
class Print: public virtual AbstractPrint {
public:
void print (string s) {
cout << s << endl;
}
};
现在,在初始化运行程序时,我们需要传递具体的访问器和打印机。这可以通过以下方式实现:
// Somewhere in a .cpp - file
Accessor accessor;
Print printer;
Runner runner(accessor, printe);
runner.run(); //will call printer and accessor through the references.
我也不理解第一部分,但是如果我理解正确的话,第二部分很简单:类运行:public virtual AbstractRun,public virtual Accessor,public virtual Print{…}@Beta非常感谢。你已经正确地理解了,你的食谱很有魅力。如果第二个部件正常工作,则不需要第一个部件。多谢你多花点时间。
class Print: public virtual AbstractPrint {
public:
void print (string s) {
cout << s << endl;
}
};
class Accessor : public AbstractAccess {
public:
string access (void){
return name;
}
void setName(string name) {
this->name = name;
}
private:
string name;
};
class Print: public AbstractPrint {
public:
void print (string s) {
cout << s << endl;
}
};
class Accessor : public AbstractAccess {
public:
string access (void) override { //overrides AbstractAcces method
return name;
}
void setName(string name) { //does not override. is a method at Accessor level
this->name = name;
}
private:
string name;
};
// Somewhere in a .cpp - file
Accessor accessor;
Print printer;
Runner runner(accessor, printe);
runner.run(); //will call printer and accessor through the references.