C++對象間關係

/**
 做者: cwl
 內容:
        類的符合,繼承,委託

*/
#include <bits/stdc++.h>

using namespace std;

class Father
{
public:
    Father(const string & _name = string("default")): name(_name), age(10) {}
    Father(const Father&);
    Father& operator = (const Father&);

    virtual void show() { cout << "father" << endl; }

    string name;
    int age;
};

class Son: public Father
{
public:

    void show() { cout << "son" << endl; }
};

void change1(Father &fa)
{
    fa.show();
}

void change2(Son &son)
{
    son.show();
}

int main()
{

    /**
    template<class T>
    class queue {

    protected:
        deque<T>c;
    public:
        bool empty() const { return c.empty(); }
        size_type size() const { return c.size(); }
        reference front() { return c.front(); }
        reference back() { return c.back(); }
        void push(const value_type &x) { c.push_back(x); }
        void pop() { c.pop_front(); }
    };


    【複合】咱們的Queue裏面有deque,咱們經過一個功能已經很強大的類
            deque實現queue,只開放了一部分接口。能夠稱爲符合
            同時也是一種設計模式 Adapter

        1,構造和析構的關係
            構造由內向外,析構有外向內。和繼承的構造析構類比理解

    class String {
    public:
        ///...
    private:
        StringRep* rep;
    };

    class StringRep {
        ///...
    };
    【委託】只是一種說法。這樣設計可以減低耦合性。
            有一個指針指向實現了。方便切換


    【繼承】
    class Base
    {

    };

    class Node : public Base
    {

    };
    能夠用is a 來解釋,蘋果是一種水果, 繼承的核心是搭配虛函數調用

    class Shape {
    public:
        virtual void draw() const = 0;  //純虛
        virtual void error(const string &msg);  //虛函數
        int objetID() const;            //普通函數
    };

    【1】非虛函數,你不但願子類複寫這個函數,override
    【2】虛函數,但願子類來定義
    【3】存虛函數,但願子類必定去複寫,應爲你沒有定義

    類的變量繼承的是內存的實例,在內存中子類有父類的變量(若是能夠繼承獲得)
    類的函數繼承的是使用權

    繼承測試
    */


    Father fa("test");
    Son son;
    /**
    fa.show();      ///father
    son.show();     ///son

    change1(fa);     ///father
    change1(son);    ///father

    ///change2(fa);     ///非法
    change2(son);       ///son
    */


///    void change1(Father &fa)
///    {
///        fa.show();
///    }
    ///不一樣點
    change1(son);    ///父類有virture輸出son, 沒有輸出father

    ///和於其符合,virtual但願重寫

    ///關於虛函數的虛表部分作一些簡單瞭解
    ///http://www.cnblogs.com/lihaosky/articles/1606502.html


    return 0;
}
相關文章
相關標籤/搜索