十四对象间关系模型的实现.docx

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
十四.对象间关系模型的实现 C++语言支持对象模型中的的包容与继承(派生)关系,但对关 联关系没有专用的语法支持。 ⒈包容关系 ① 不透明包容 例: #include<iostream.h> class A { int i; public: A(){i=0;} A(int x):i(x){} int operator!(){return i;} }; class B { int j; *p; public: B(int x):j(x){p=new A[x];} int operator!(){return j;} void operator~(){for(int i=0;i<j;i++)cout<<!p[i];} }; void main() { b(10); cout<<!b<<endl; ~b; } ② 透明包容 1 例:向对象单向链表中插入已有的对象 #include<iostream.h> class A { int i; *next; public: A(int x,A* s=NULL):i(x),next(s){} A* GetNext(){return next;} void SetNext(A* s){next=s;} int operator!(){return i;} }; class B { int j; A *p; public: B(int x,A* s=NULL):j(x),p(s){} void Insert(A* s) { if(!p)p=s; else { A* temp=p; while(temp->GetNext())temp=temp->GetNext(); temp->SetNext(s); } } int operator!(){return j;} void operator~() { A* temp=p; while(temp) { 2 cout<<!(*temp)<<endl; temp=temp->GetNext(); } } }; void main() { a1(0),a2(1),a3(2); b(10,&a1); b.Insert(&a2); b.Insert(&a3); !a1; ~b; cin.get(); } ③类模板 当被包容的类的种类不确准时,能够用类模板来声明包容关系。 其声明格式为: template<class T> class 体声明; 类模板参数表内能够声明多个模板参数, 但若其内部存在的模板参是此外一个亦被声明为类模板的类,则务使之自左向右排放。 例 1: template<class T> class A { i; public: A(T x):i(x){} }; 例 2: #include<iostream.h> template<class T> class Array 3 { *ar; public: Array(int c){ar=new T[c];} void init(int n,T x){ar[n]=x;} T& operator[](int n){return ar[n];} }; void main() { Array<int> array(5); cout<<"Please input every element's value:"<<endl; for(int i=0;i<5;i++) { cout<<"No."<<i+1<<':'; cin>>array[i]; } } ⒉继承(派生)关系 在 C++语言中有特意的语句支持继承(派生)关系。其声明的语 法格式为: public 类名 i class 类名 1: { 成员声明 }; private 类名 k 例: class A { protected: int i; public: A(int x):i(x){} }; class B:public A 4 { int j; public: B(int x,int y):j(x),A(y){} }; void main() { B b(1,2); } 使用继承时的一些规则: ①基类成员被继承的可能性 ·public 区的成员能够被部分或全部的继承; ·protected 区的成员在本类对象中的功能与同类 private 区的成员相 同且能够被部分或全部的继承; ·private 区的成员不可能被继承; ②两种继承方式的作用 派生类中以 public 方式继承 派生类中以 private 方式继承 public public private protected protected private private - - 由于存在上述两种继承方式便可能致使派生类中彻底失去对其 内部基类成员的存取权利: 基类 A ↓ 以

文档评论(0)

156****2389 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档