请教各位学长一个东西,关于继承的,意思简单,但实现有点问题
有三个类 图Graph, 点Point, 边Arc
各自派生出三个类 分子Molecule,原子Atom,联系Liaison
另外派生出三个类 网络Reseaux,机器Post ,联络Lien
图类里写一点添加点和边的函数,点类里写一点添加边的函数,边里再写一点添加点的函数等等等等
如果类按照如下定义,分子的实例可以添加机器的实例
//Graph.h
#include<stdio.h>
#include<iostream>
#include <string>
#include <vector>
using namespace std;
class Point;
class Arc;
class Graph{
public:
Graph(){};
Point *points[];
Arc *arcs[];
vector<Sommet*> points;
vector<Arc*> arcs;
virtual void addPoint(Point* s){
points.push_back(s);
cout<<"Point added"<<endl;
}
virtual void addArc (Arc* a) {
arcs.push_back(a);
cout<<"Arc added"<<endl;
}
};
class Point{
public:
Point(){};
Arc * arcs[];
};
class Arete {
public:
Arc(){};
Point * head;
Point *queue;
};
//Chimie
#import "Graph.h"
class Atom;
class Liaison;
class Molecule : virtual public Graph{
public: Molecule(){cout<<"Molecule created"<<endl;};
};
class Atom : virtual public Arc{
public:Atom(){cout<<"Atom created"<<endl;};
};
class Liaison : virtual public Arc{
public Liaison(){cout<<"Liaison created"<<endl;};
};
//Reseaux.cpp
#import "Graph.h"
class Post;
class Lien;
class Reseaux : virtual public Graph{
public:
Reseaux(){cout<<"Reseaux created"<<endl; };
};
class Post : virtual public Arc{
public:
Post(){cout<<" Post created"<<endl;};
};
class Lien : virtual public Arc{
public:
Lien(){cout<<"Lien created"<<endl; };
};
//Test.cpp
#import "Chimie.cpp"
#import "Reseaux.cpp"
int main(){
Molecule * m = new Molecule();
Atom *a = new Atom();
m->addPoint(a);
Post *p = new Post();
m->addPoint(p);// 这条代码会将电脑的实例加到分子的实例上,目的是制止这个操作(分别在编译和运行时)
}
现在目的是要禁止红色这条语句的发生,如何做?
老师的要求是让程序
1.编译时报错
2.运行时报错,并且报错时安全显示
在JAVA里我是用限定类型的模板或者是调用父类并抛出cast异常解决的,但C++就不知道了
前一个好办,在分子和网络里重定义添加的函数就可以了
后一个怎么办?
当然老师不限制手段,是否可以为两个类定义一个共同的接口,然后在这个接口里定义函数什么的?
或者说有什么模式设计的模型适合这个要求的?
另外C++里的类型转换异常如何抛出?
小弟刚开始C++,诚意请各位老鸟指点一二。