实例化抽象类,然后使用特定的派生类重新声明?

问题描述

我有一个带有纯虚函数的基类,并且有两个与此基类不同的派生类。 为了进行范围界定,我需要实例化抽象类,然后选择需要在程序中使用的派生类。请注意,我通过引用传递了myObj。

class Base {
    public:
        virtual int build(const std::string &fname) = 0; //pure virtual build function
}

class A : public Base {
    public:
        int build(const std::string &fname); //Implementation of build
}

class B : public Base {
    public:
        int build(const std::string &fname); //Implementation of build
}

int run(const Base &myObj) {
       //Random things will be done based on myObj being passed by reference
       //myObj.get_info();
       //myObj.val;
}

int main(const char *tag) {
    
    std::string s = tag;
    Base myObj;
    if(s.compare("Class A")) {
        A myObj;
    }
    if(s.compare("Class B")) {
        B myObj;
    }
    run(myObj);
    return 0;
}

解决方法

至少不能按照您的指定完成此操作。在C ++中,当像这样进行继承时,通常需要使用堆分配的对象。

为此,我建议使用struct point{ int x,y; int *s; }; int main(void){ int n,val1,val2,val3,val4,i; vector<point> v; v.resize(2); cin >> n; for(i = 1; i <= n; i++) { cin >> val1 >> val2 >> val3 >> val4; v[i - 1].x = val1; v[i - 1].y = val2; v[i - 1].s = new int[2]; // here i think is the problem. //v[i - 1].s = (int *)malloc(2 * sizeof(int)); v[i - 1].s[0] = val3; v[i - 1].s[1] = val4; } for(i = 0; i <= v.size(); i++) { cout << v[i].x << " " << v[i].y << " " << v[i - 1].s[0] << " " << v[i - 1].s[1] ; cout << "\n"; } return 0; } ,例如:

std::unique_ptr

请注意,我已修复了您在问题中遇到的一些语法错误,但似乎您正在尝试使用C ++,就好像它是其他某种语言一样:)