class A { public: voID printHello() { cout << "HELLO A" << endl; }}; class B { public: voID printHello() { cout << "HELLO B" << endl; } };class C { public: voID printHello() { cout << "HELLO C" << endl; } }; int main () { string key = "c"; A a; B b; C c; Object obj; // I don't kNow how to declare Object. if (key == "a") obj = a; else if (key == "b") obj = b; else obj = c; obj.printHello(); // print Hello C. return 0; }
我考虑过模板和结构对象.但到目前为止他们都没有工作.
template<typename T1,T2,T3> T1 getType(string key,T1 t1,T2 t2,T3 t3) { // this is problem coz return types are different. if (key == "a") return t1; else if (key == "b") return t2; else return t3; }
创建Object o很容易;在JAVA中,因为Java中的每个对象都是Object类的子类.但是我如何在C中实现这一目标?
编辑.
我不能改变A,B和C类.我得到了这些课程,我的目标是实现main方法.所以,继承对我来说是不可能的.对不起任何困惑.
任何帮助表示赞赏.
解决方法 您正在寻找变体类型.在C 17中有一个即将推出的std :: variant,以及在boost和Web上的C 11兼容版本.boost::variant
的示例: struct visitor{ voID operator()(const A&){ cout << "HELLO A" << endl; } voID operator()(const B&){ cout << "HELLO B" << endl; } voID operator()(const C&){ cout << "HELLO C" << endl; }};int main(){ visitor v; // `obj` is either an `A`,a `B` or a `C` at any given moment. boost::variant<A,B,C> obj{B{}}; // ^^^^^ // Initialize with `B`. boost::apply_visitor(v,obj); // prints "HELLO B" obj = A{}; boost::apply_visitor(v,obj); // prints "HELLO A"}总结
以上是内存溢出为你收集整理的创建一个变量来保存不同类型的对象C.全部内容,希望文章能够帮你解决创建一个变量来保存不同类型的对象C.所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)