标签:
has-A,uses-A 和 is-A
has-A : 包含关系,用以描述一个类由多个“部件类”构成。实现has-A关系用类成员表示,即一个类中的数据成员是另一种已经定义的类。
uses-A : 一个类部分地使用另一个类。通过类之间成员函数的相互联系,定义友元或对象参数传递实现。
is-A : 机制称为“继承”。关系具有传递性,不具有对称性。
类 A 称为基类(父类),类 B 称为派生类(子类)
c++支持多继承
类继承关系的语法形式
class 派生类名 : 基类名表
{
数据成员和成员函数声明
};
基类的保护成员-》派生类的保护成员
1 #include <iostream> 2 using namespace std; 3 4 class A 5 { 6 public: 7 void get_XY() 8 { 9 cout << "Enter two numbers of x,y:"<< endl; 10 cin>>x>>y; 11 } 12 void output_XY() 13 { 14 cout << "x=" << x << ‘\t‘ << "y=" << y << endl; 15 } 16 protected: //保护数据成员,在类层次中可见 17 int x,y; 18 }; 19 class B: public A 20 { 21 public: 22 int get_S() 23 { 24 return s; 25 } 26 void make_S() 27 { 28 s = x*y; 29 } 30 protected: 31 int s; 32 }; 33 class C:public B 34 { 35 public: 36 void getH() 37 { 38 cout <<"Enter a number h:"; 39 cin>>h; 40 } 41 int getV() 42 { 43 return v; 44 } 45 void makeV() 46 { 47 make_S(); 48 v = get_S() * h; 49 } 50 protected: 51 int h,v; 52 }; 53 int main() 54 { A objA ; 55 B objB ; 56 C objC ; 57 cout << "It is object_A :\n" ; 58 objA.get_XY() ; 59 objA.output_XY() ; 60 cout << "It is object_B :\n" ; 61 objB.get_XY() ; 62 objB.make_S() ; 63 cout << "S = " << objB.get_S() << endl ; 64 cout << "It is object_C :\n" ; 65 objC.get_XY() ; 66 objC.getH(); 67 objC.makeV() ; 68 cout << "V = " << objC.getV() << endl ; 69 }
2.私有继承:
1 #include<iostream> 2 using namespace std ; 3 class A 4 { public : 5 void get_XY() 6 { 7 cout << "Enter two numbers of x and y : " ; 8 cin >> x >> y ; 9 } 10 void put_XY() 11 { 12 cout << "x = "<< x << ", y = " << y << ‘\n‘ ; 13 } 14 protected: 15 int x, y ; 16 }; 17 class B : private A 18 { public : 19 int get_S() 20 { 21 return s ; 22 } 23 void make_S() 24 { 25 get_XY(); 26 s = x * y ; 27 } 28 private: 29 int s ; 30 }; 31 int main() 32 { B objB ; 33 cout << "It is object_B :\n" ; 34 objB.make_S() ; 35 cout << "S = " << objB.get_S() << endl ; 36 }
3。重名成员
时屏蔽了基类的同名成员
类名 :: 成员
标签:
原文地址:http://www.cnblogs.com/Smart-Du/p/4331309.html