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( , , );
c1.show();
while();
return ;
}
// ac.m_ax = 1
// ac.m_ay = 2
// bc.m_bx = 3

c++,类的组合的更多相关文章

  1. C++:类的组合

    在类中定义的数据成员一般都是基本数据类型或服复合数据类型.但是还可以根据需要使用 其他类的对象作为正在声明的数据成员.复杂的对象还可以有比较简单的对象一某种方式组合 而成,复杂对象和组成它的简单对象之 ...

  2. c++基础语法 构造函数 析构函数 类的组合

    1 构造函数 1.不能指定任何返回值,甚至连void都不能有. 2.与Java不同,c++不同new对象,对于无参的构造函数声明对象时括号应该省略. 2 析构函数 1. 前加~,不能有参数,不能有返回 ...

  3. 【C++基础】类的组合

    所谓类的组合是指:类中的成员数据是还有一个类的对象或者是还有一个类的指针或引用.通过类的组合能够在已有的抽象的基础上实现更复杂的抽象. 比如: 1.按值组合 #include<iostream. ...

  4. C++类的组合例子

    Line类调用Point类的两个对象p1,p2作为其数据成员,计算线段长度 组合类构造函数定义的一般形式为: 类名::类名(形参表):内嵌对象1(形参表),内嵌对象2(形参表)... {类的初始化} ...

  5. python - class类 (三) 类的组合

    类的组合: #组合 class A1(): def pr(self): return 'a1' class A2(): def pr(self): return 'a2' class A3(): de ...

  6. python类的组合

    类的组合,即在类实例化时,将另一个类的实例作为参数传入,这样可以将两个实例关联起来. 当类之间有显著不同,并且较小的类是较大的类所需要的组件时,用组合比较好. 例如,描述一个机器人类,这个大类是由很多 ...

  7. day25类的组合多态封装

    类的组合多态与封装类的组合 1. 什么是组合  组合指的是某一个对象拥有一个属性,该属性的值是另外一个类的对象 2. 为何要用组合  通过为某一个对象添加属性(属性的值是另外一个类的对象)的方式,可以 ...

  8. Java编程的逻辑 (14) - 类的组合

    ​本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...

  9. 7 python 类的组合

    1.组合与重用性 软件重用的重要方式除了继承之外还有另外一种方式,即:组合 组合指的是,在一个类中以另外一个类的对象作为 1.一个类的属性可以是一个类对象,通常情况下在一个类里面很少定义一个对象就是它 ...

随机推荐

  1. servlet三种实现方式之三通过继承HttpServlet开发servlet

    servlet有三种实现方式: 1.实现servlet接口 2.继承GenericServlet 3.通过继承HttpServlet开发servlet 第三种: import java.io.*; i ...

  2. Android 开发笔记“调用.net webservice遇到的问题”

    1.An exception occurred: org.ksoap2.SoapFault SoapFault - faultcode: 'soap:Server' faultstring: '服务器 ...

  3. MYSQL异常和错误机制

    BEGIN ; ; ; START TRANSACTION; call put_playerbehavior(i_playerid,i_gameid,i_channelid,i_acttime,@a) ...

  4. 常用SQL的优化

    导入数据 对于MyISAM存储引擎的表,可以通过以下方式快速地导入大量数据 alter table tbl_name disable keys;              //关闭表非唯一索引的更新 ...

  5. 定时每天备份mysql

    http://blog.csdn.net/panning_hu/article/details/9210001 Spring MVC Spring中MVC框架的底层实现 http://blog.csd ...

  6. QT类型转换(九种转换)

    1.char * 与 const char *的转换 char *ch1="hello11";const char *ch2="hello22";ch2 = c ...

  7. 数据结构与算法分析 3.4&3.5 — 链表的交与并算法

    代码: #include <list> template<typename ElementType> list<ElementType> Intersect(con ...

  8. invalid nib registered for identifier (重用符) - nib must contain exactly one top level object which must be a UITableViewCell instance'

    通过xib创建cell的时候 一定要注意!!! 这个错误是在这个xib中在View同一层级出现了其他的控件,检查一下xib中左边的层级关系,让cell的view是唯一的控件就可以了,否则一执行 就会提 ...

  9. Android项目导入时,出现的Could not write file 。。。。。。.classpath错误解决办法

    导入到Eclipse中后选择了相应的API后,红叉的项目错误没有了. 工程列表也无任何错误了.但出现了这样的提示框错误 说明的是.classpath这个环境文件不能写.随后,查看工程文件主目录下的.c ...

  10. 初始Android-配置环境

    最近闲来无事自学了一下Android,今天没事想整理一下思绪,简单的介绍一下我自己对环境配置的认识,仅供参考,欢迎提出意见. 1.首先打开Eclipse,然后安装ADT,准备好ADTjar包或者zip ...