如何解决实例化抽象类,然后使用特定的派生类重新声明?
我有一个带有纯虚函数的基类,并且有两个与此基类不同的派生类。 为了进行范围界定,我需要实例化抽象类,然后选择需要在程序中使用的派生类。请注意,我通过引用传递了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 ++,就好像它是其他某种语言一样:)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。