zoukankan      html  css  js  c++  java
  • 组合(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)如果父类中的成员函数没有被重写,直接继承到子类,这个成员函数操作的成员变量是父类的成员变量,不是子类的成员变量

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

  • 相关阅读:
    bootstrap-table设置表头宽度无效的解决方案
    bootstrap-table设置某列序号自增
    arguments.callee
    javascript中break和continue
    javascript数据类型
    <script>标签的属性
    javascript核心
    javascript中数据属性与访问器属性
    解决ie9以下下不支持html5和媒体查询(Media Queries)
    用firefox获取html页面元素的Xpath
  • 原文地址:https://www.cnblogs.com/cplinux/p/5703695.html
Copyright © 2011-2022 走看看