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;
}

猜你喜欢

转载自www.cnblogs.com/Q1143316492/p/10386291.html