问题描述
我有一个带有纯虚函数的基类,并且有两个与此基类不同的派生类。 为了进行范围界定,我需要实例化抽象类,然后选择需要在程序中使用的派生类。请注意,我通过引用传递了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 ++,就好像它是其他某种语言一样:)