class MeshGeneration{
public:
static MeshGeneration CreateUnstrMesh() {
cout<<"Unstr called"<<endl;
return MeshGeneration(0);}
static MeshGeneration CreateStrMesh() {
cout<<"Str called!"<<endl;
return MeshGeneration(1);}
virtual void CreateHybridMesh(){}
protected:
MeshGeneration(int mesh_type = -1){
string mstring;
if(mesh_type == 0)
mstring = "unstructured";
else if(mesh_type == 1)
mstring = "structured";
else;
cout <<"mesh_type = "<<mstring<<endl;
}
};
class DerivedMeshGeneration:public MeshGeneration{
public:
void CreateHybridMesh(){
cout<<"mesh_type = hybrid"<<endl;
}
};
int main(int argc, char * argcv[]){
MeshGeneration m1 = MeshGeneration::CreateUnstrMesh();
MeshGeneration m2 = MeshGeneration::CreateStrMesh();
MeshGeneration m3 = DerivedMeshGeneration::CreateUnstrMesh();
m3.CreateHybridMesh(); // not working as expected..
return 0;
}
最后一个函数没有按预期工作——打印出“mesh_type = hybrid”。我认为 当我继承基类时出了点问题。任何建议表示赞赏! 它。
最佳答案
两个主要问题:
为了像您尝试的那样使用多态基类,您必须使用引用、指针或智能指针。由于对象 m1
、m2
和 m3
是 MeshGeneration
类型的普通变量,它们永远不会真正成为一个DerivedMeshGeneration
,无论最初创建的=
右边的函数是什么。
DerivedMeshGeneration::CreateUnstrMesh()
与 MeshGeneration::CreateUnstrMesh()
的功能相同,因此它从一开始就不会创建派生对象。
关于c++ - 从具有命名构造函数问题的基类继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5021774/