| |||
| 有三个类 图Graph, 点Point, 边Arc 各自派生出三个类 分子Molecule,原子Atom,联系Liaison 另外派生出三个类 网络Reseaux,机器Post ,联络Lien 图类里写一点添加点和边的函数,点类里写一点添加边的函数,边里再写一点添加点的函数等等等等 如果类按照如下定义,分子的实例可以添加机器的实例 代码:
老师的要求是让程序 1.编译时报错 2.运行时报错,并且报错时安全显示 在JAVA里我是用限定类型的模板或者是调用父类并抛出cast异常解决的,但C++就不知道了 前一个好办,在分子和网络里重定义添加的函数就可以了 后一个怎么办? 当然老师不限制手段,是否可以为两个类定义一个共同的接口,然后在这个接口里定义函数什么的? 或者说有什么模式设计的模型适合这个要求的? 另外C++里的类型转换异常如何抛出? 小弟刚开始C++,诚意请各位老鸟指点一二。 此帖于 2008-01-02 01:13 AM 被 qiangmu 编辑. |
| |||
| 对不起,楼上的可以解释清楚一些吗?用模板是个,跟我想法一样,非常棒的思路!! 我还不太明白,用typedef的话,跟virtual有什么关系?有virtual的话又如何得出运行时错误?我写成如下这样可以吗? 不胜感激 //Graph.h #include <iostream> #include <string> #include <vector> using namespace std; template <typename G,typename P,typename A> class Arc{ public: // virtual ~Arc(); }; template <typename G,typename P,typename A> class Point{ public: // virtual ~Point(); }; template <typename G,typename P,typename A> class Graph{ public: vector <P*> points; vector <A*> arcs; Graph(){cout < <"Graph created" < <endl;} virtual void addPoint(P * p){ P *pp = (dynamic_cast < P*> ( p )); if(NULL == pp){ cout <<"Error: It is not suitable!" < <endl; }else{ points.push_back( pp ); cout <<"Point Added" < <endl; } } virtual void addArc(A * a){ arcs.push_back( a ); } virtual ~Graph(){} }; //Chimie.cpp #import "Graph.h" class Atom; class Liaison; class Molecule; class Atom : virtual public Point <Molecule,Atom,Liaison> {}; class Liaison : virtual public Arc <Molecule,Atom,Liaison> {}; class Molecule : virtual public Graph <Molecule,Atom,Liaison> { public : Molecule(){cout < <"Molecule created" < <endl;} }; //Reseaux.cpp #import "Graph.h" class Post; class Lien; class Reseaux : virtual public Graph <Reseaux,Post,Lien> { public : Reseaux(){} }; class Post : virtual public Point <Reseaux,Post,Lien> { public : Post(){} }; class Lien : virtual public Arc <Reseaux,Post,Lien> { public : Lien(){} }; //Test.cpp #import "Chimie.cpp" #import "Reseaux.cpp" int main(){ Molecule * m = new Molecule(); Atom *a = new Atom(); Liaison *l = new Liaison(); m-> addPoint( a ); Reseaux *r = new Reseaux(); Post *p = new Post(); m-> addPoint ( p ); //这里要出现运行时的错误 getchar(); return 0; } 也就是说派生类里不写添加点边的函数,全写在模板类里,这样有可能将错误推迟到运行时显示吗? 另外,C++的模板类里的类变量是不是不可以申明指针 如果将上面的注释去掉就有连接错误,没有虚析构函数的话不是没法dynamic_cast了吗? 此帖于 2008-01-03 08:13 PM 被 qiangmu 编辑. |
| |||
| 代码:
|