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

 

posted @ 2014-11-13 15:01  oucaijun  阅读(745)  评论(0编辑  收藏  举报
下载TeamViewer完整版 下载TeamViewer