zoukankan      html  css  js  c++  java
  • 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;
    }
    
  • 相关阅读:
    JS异错面试题
    CSG
    OBS工具汇总
    SFS OBS
    zookeeper配置文件
    zookeeper概念
    centos yum源问题三板斧
    nexus仓库
    SVN备份恢复
    ubuntu
  • 原文地址:https://www.cnblogs.com/Q1143316492/p/10386291.html
Copyright © 2011-2022 走看看