zoukankan      html  css  js  c++  java
  • c++,类的组合

    1. 在A类中以B类的对象作为成员变量,称为类的组合(composition)。

    可以先看看这篇文章理解组合的用处:

    C++中组合的使用 http://blog.csdn.net/jia_xiaoxin/article/details/2938032

    组合(有时候叫聚合)是将一个对象(部分)放到另一个对象里(组合)。它是一种 has-a 的关系。 有时候开发者在他们该使用组合的时候错误的使用继承(kind-of),例如,他们可能使FordTaurus从Engine继承,这是把Kind-of和Part-of给搞混乱了.
    #include <iostream>
    using namespace std;
    
    class Engine {
    public:
      virtual void start();
    };
    
    void Engine::start()
    {
      cout << "starting Engine/n";
    }
    
    class FordTaurus {
    public:
      virtual void start();
    protected:
      Engine engine_;    // An Engine is part of a FordTaurus
    };
    void FordTaurus::start()
    {
      cout << "starting FordTaurus/n";
      engine_.start();
    }
    
    int main()
    {
      FordTaurus taurus;
      taurus.start();
    }


    2. 在组合时,一般在A类的构造函数初始化列表中要初始化B类(会调用B类的一个构造函数),

        如果没有初始化B类,则会调用B类中可以不传参数的构造函数。

    #include <iostream>
    using namespace std;
    #include <string>
    //--------------------------------------
    class A
    {
    public:
        int m_ax ;
        int m_ay ;
    
        A();
        A(int val,int vy);
    };
    A::A()
    {
    
    }
    A::A(int vx,int vy)
    {
        this->m_ax = vx;
        this->m_ay = vy;
    }
    //--------------------------------------
    class B
    {
    public:
        int m_bx ;
    
        B();
        B(int val);
    };
    
    B::B()
    {
    
    }
    B::B(int val)
    {
        this->m_bx = val;
    }
    //--------------------------------------
    class C
    {
    public:
        A ac;
        B bc;
        C();
        C(int vax,int vay,int vbx );
        C(int vax ,int vay);
        C(int vbx) ;
        
    
        void show();
    };
    C::C()
    {
    
    }
    C::C(int vax ,int vay,int vbx)
        :ac(vax,vay),bc(vbx)
    {
    
    }
    C::C(int vax ,int vay)
        :ac(vax,vay)
    {
    
    }
    
    C::C(
    int vbx):bc(vbx)//没有初始化的内部类对象,可以不写出来 ,也可以写出来ac()。 C::C(int vbx):bc(vbx),ac()
    {
    
    }
    void C::show()
    {
        cout<<"ac.m_ax = "<<ac.m_ax<<endl;
        cout<<"ac.m_ay = "<<ac.m_ay<<endl;
        cout<<"bc.m_bx = "<<bc.m_bx<<endl;
    }
    //--------------------------------------
    int main()
    {
         C c1(1 ,2 ,3 );
         c1.show();
        while(1);
        return 0 ;
    }
    // ac.m_ax = 1
    // ac.m_ay = 2
    // bc.m_bx = 3
  • 相关阅读:
    Java 集合系列06之 Vector详细介绍(源码解析)和使用示例
    Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例
    Java 集合系列02之 Collection架构
    Java 集合系列01之 总体框架
    [转载] 散列表(Hash Table) 从理论到实用(下)
    [转载] 散列表(Hash Table)从理论到实用(中)
    [转载] 散列表(Hash Table)从理论到实用(上)
    Android 之窗口小部件高级篇--App Widget 之 RemoteViews
    Android控件之GridView
    红黑树(一)之 原理和算法详细介绍
  • 原文地址:https://www.cnblogs.com/mylinux/p/4094988.html
Copyright © 2011-2022 走看看