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