码迷,mamicode.com
首页 > 其他好文 > 详细

类与类之间的关系

时间:2017-11-29 23:38:51      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:函数   turn   mes   重写   color   rman   space   oid   font   

  • 横向关系

依赖 关联 聚合 组合

判断方法:

  生命周期有关系:组合,聚合
  聚合:包含多个相同的类
  组合:定义的时候就要有
  依赖:只要使用就必须要有
  关联:可有可无

  • 纵向关系

继承

基类( 父类 )->派生类(子类)

 1 #include <iostream>
 2 using namespace std;
 3 
 4 class CPerson
 5 {
 6 protected:
 7     
 8 public:
 9     int age;
10     CPerson()
11     {
12         age = 100;
13     }
14 };
15 class CSuperman :public CPerson
16 {
17 protected:
18     
19 public:
20     int age;
21     CSuperman()
22     {
23         age = 123;
24     }
25 };
26 int main()
27 {
28     CPerson person;
29     CSuperman superman;
30     cout<<superman.age<<endl;                                  //123
31     cout<<superman.CPerson::age<<endl;                         //100
32     superman.CPerson::age = 111;
33     cout<<person.age<<endl;//改写的为父类中的子类,与父类没关系      //100
34     cout<<superman.CPerson::age<<endl;                         //111
35 }
  父类中 private 成员在无论怎样继承,在子类中都不可访问
  public 继承 public和protected 没有变化
  protected  继承  public 变成 protected 
  private    继承   public, protected 变成 private
继承的构造和析构
 1 #include<iostream>
 2 using namespace std;
 3 
 4 class AA
 5 {
 6 public:
 7     AA()
 8     {
 9         cout << "AA" << endl;
10     }
11     ~AA()
12     {
13         cout << "~AA" << endl;
14     }
15 };
16 
17 class BB:public AA
18 {
19 public:
20     BB()
21     {
22         cout << "BB" << endl;
23     }
24     ~BB()
25     {
26         cout << "~BB" << endl;
27     }
28 };
29 
30 class CC
31 {
32 public:
33     CC()
34     {
35         cout << "CC" << endl;
36     }
37     ~CC()
38     {
39         cout << "~CC" << endl;
40     }
41 };
42 
43 class DD:public CC
44 {
45 public:
46     BB b;
47 public:
48     DD()
49     {
50         cout << "DD" << endl;
51     }
52     ~DD()
53     {
54         cout << "~DD" << endl;
55     }
56 };
57 
58 int main()
59 {
60     DD d;
61 
62     return 0;
63 }


重载重写和隐藏
 1 #include <iostream>
 2 using namespace std;
 3 void Func(int a)
 4 {
 5     cout<<a<<endl;
 6 }
 7 void Func(int* a)//重载:函数名相同,参数不同
 8 {
 9     cout<<*a<<endl;
10 }
11 class CFather
12 {
13 public :
14     int m_a;
15     int m_b;
16     void Func(int a)
17     {
18         cout<<"CFather::Func()"<<endl;
19     }
20 };
21 class CSon:public CFather
22 {
23 public:
24     void Func(int b)//重写:子类与父类函数名相同,参数相同
25     {
26         cout<<"重写:CSon::Func()"<<endl;
27     }
28     void Func(int*a)//隐藏:子类与父类函数名相同,参数不同
29     {
30         cout<<"重载;CSon::Func()"<<endl;
31     }
32 };
33 int main()
34 {
35     CSon son;
36     int a = 0;
37     Func(a);
38     Func(&a);//重载
39     son.Func(&a);//隐藏:  只能调用子类中的函数
40     son.CFather::Func(a);//若要用父类中的函数要加作用域
41     son.Func(a);//重写
42 }
父类指针指向子类对象

 

多态
虚函数

类与类之间的关系

标签:函数   turn   mes   重写   color   rman   space   oid   font   

原文地址:http://www.cnblogs.com/Lune-Qiu/p/7912422.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!