组合(composition)与继承(inheritance)

c++中一个重要的特点就是代码的重用,为了代码重用,有两个非常重要的手段,一个是继承,一个是组合

 

上面两种类的关系就分别是继承和组合。下面我们看一下代码示例:

 

 1 #ifndef USEFUL_H
 2 #define USEFUL_H
 3 #include<iostream>
 4 using namespace std;
 5 class X{
 6     int i;
 7 public:
 8     X():i(1){ }
 9     X(int ii) :i(ii){}
10     void set(int ii){
11         i = ii;
12         cout << "X::set()" << endl;
13     }
14 
15     int read()const{
16         cout << "X::read()" << endl;
17         return i;
18     }
19 
20     int permute(){
21         cout << "X::permute" << endl;
22         return i = i * 43;
23     }
24 
25 };
26 #endif //USEFUL_H
#include"Useful.h"
#include<iostream>
using std::endl;
using std::cout;
class Y :public X{//Y继承自X
    int i;
public:
    Y(){
        i = 0;
    }
    int change(){
        return i;
    }

    void set(int ii){
        i = ii;
        X::set(ii);
    }
};

int main(){
    cout << "sizeof(X)=" << sizeof(X) << endl;
    cout << "sizeof(Y)=" << sizeof(Y) << endl;
    Y y;
    
    //cout << "Y::change()" << y.change() << endl;
    cout << "Y::read()=" << y.read() << endl;
    return 0;
}

继承时有几个特别注意的地方:
(1)父类的所有成员函数和成员变量都会被继承到子类中,但是如果子类中的函数新定义的函数(在父类中没有,子类中独有的)要访问子类的共有成员变量,需要用父类::成员变量的形式
(2)如果子类中重新定义了父类中的函数,访问那么子类中这个函数要访问父类中的成员变量也需要用父类::成员变量
(3)如果父类中的成员函数没有被重写,直接继承到子类,这个成员函数操作的成员变量是父类的成员变量,不是子类的成员变量

子类的成员函数操作子类的对象,父类的成员函数操作父类的对象,哪怕被继承到子类,从父类继承的成员函数也是操作的从父类继承的那部分成员变量。当然可以重写从父类继承的成员函数,重写后的成员函数就是子类的成员函数了

 

posted @ 2016-07-25 19:08  阿瞒123  阅读(1752)  评论(0)    收藏  举报