c++中一个重要的特点就是代码的重用,为了代码重用,有两个非常重要的手段,一个是继承,一个是组合

上面两种类的关系就分别是继承和组合。下面我们看一下代码示例:

 #ifndef USEFUL_H
#define USEFUL_H
#include<iostream>
using namespace std;
class X{
int i;
public:
X():i(){ }
X(int ii) :i(ii){}
void set(int ii){
i = ii;
cout << "X::set()" << endl;
} int read()const{
cout << "X::read()" << endl;
return i;
} int permute(){
cout << "X::permute" << endl;
return i = i * ;
} };
#endif //USEFUL_H
#include"Useful.h"
#include<iostream>
using std::endl;
using std::cout;
class Y :public X{//Y继承自X
int i;
public:
Y(){
i = ;
}
int change(){
return i;
} void set(int ii){
i = ii;
X::set(ii);
}
}; int main(){
cout << "sizeof(X)=" << sizeof(X) << endl;
cout << "sizeof(Y)=" << sizeof(Y) << endl;
Y y; //cout << "Y::change()" << y.change() << endl;
cout << "Y::read()=" << y.read() << endl;
return ;
} 继承时有几个特别注意的地方:
()父类的所有成员函数和成员变量都会被继承到子类中,但是如果子类中的函数新定义的函数(在父类中没有,子类中独有的)要访问子类的共有成员变量,需要用父类::成员变量的形式
()如果子类中重新定义了父类中的函数,访问那么子类中这个函数要访问父类中的成员变量也需要用父类::成员变量
()如果父类中的成员函数没有被重写,直接继承到子类,这个成员函数操作的成员变量是父类的成员变量,不是子类的成员变量

子类的成员函数操作子类的对象,父类的成员函数操作父类的对象,哪怕被继承到子类,从父类继承的成员函数也是操作的从父类继承的那部分成员变量。当然可以重写从父类继承的成员函数,重写后的成员函数就是子类的成员函数了

组合(composition)与继承(inheritance)的更多相关文章

  1. 面向对象三大特性一一继承(inheritance)和组合(Composition)

    记住2句话(常识),像个正常人思考! 1.“  is-a ”关系 用 继承! 学生是人,学生继承人这个类, 2. “has-a ”关系 用 组合!电脑有显卡,那么我们就在计算机类中增加显卡属性来复用显 ...

  2. UML的关联(Association), 聚合(Aggregation), 组合(Composition)区别

    转载:http://blog.csdn.net/ocean181/article/details/6117369 UML的关联(Association), 聚合(Aggregation), 组合(Co ...

  3. Python面向对象(组合、菱形继承、多态)

    今日内容: 1.组合 2.菱形继承 3.多态与多态性 昨天内容重点回顾: 1)调用也叫实例化:发生了2件事  1.创造空对象  2.触发对象下的__init__方法,然后将p连同参数一同传给init  ...

  4. 面向对象第二个特征-继承(Inheritance)

    面向对象第二个特征-继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.java中的继承概述 1>.继承概述 多个类种存在相同属性和行为时,讲这 ...

  5. 读书笔记 effective c++ Item 38 通过组合(composition)为 “has-a”或者“is-implemented-in-terms-of”建模

    1. 什么是组合(composition)? 组合(composition)是一种类型之间的关系,这种关系当一种类型的对象包含另外一种类型的对象时就会产生.举个例子: class Address { ...

  6. <<Effective Java>>之善用组合而不是继承

    使用JAVA这门OO语言,第一要义就是,如果类不是专门设计来用于被继承的就尽量不要使用继承而应该使用组合 从上图2看,我们的类B复写了类A的add喝addALL方法,目的是每次调用的时候,我们就能统计 ...

  7. [置顶] c++类的继承(inheritance)

    在C++中,所谓"继承"就是在一个已存在的类的基础上建立一个新的类.已存在的类(例如"马")称为"基类(base class )"或&quo ...

  8. OC 组合实现多继承

    OC无法完全先C++使用多继承,但可以采用组合的模式来代替继承模式.(协议实现)实现多继承的代码:举例现在ClassC需要继承ClassA中methodA.ClassB中methodB,具体的代码为: ...

  9. javascript 继承 inheritance prototype

      * Rectangle继承Shape function Shape() { this.x = 0; this.y = 0; } Shape.prototype.move = function(x, ...

  10. Java总结(二):继承——Inheritance

    关于继承: 1.为了重用代码——引入继承. 2.父类的某些方法反正要被重写,在父类里实现在也无用——引入抽象类. 3.把抽象类里的抽象方法抽出来——引入接口.

随机推荐

  1. CRM 2016 js 奇怪现象

    假如 js 中如果定义了 两个字段的onchage 事件. 如果一个字段的onchange事件,改变了另一个字段的值,那么也会触发另一个字段的onchange事件!!!!????

  2. VS2010+VMWare8+VisualDDK1.5.6 创建并调试你的第一个驱动程序 - 完全教程

    本文描述了如何使用Visual Studio+VMMare+VisualDDK来创建.编译和调试你的第一个驱动程序.本文提供在开发和调试工具的环境下详细的操作步骤,而无需太多的关心这些环境背后所做的事 ...

  3. Jmeter组件2. Timer 定时器

    关于定时器,首先明确几个概念 定时器在每个Sampler执行之前执行 定时器有作用域,同一个作用域内的定时器会在域内Sampler执行之前都执行掉 如果要让某定时器只作用于一个Sampler,将定时器 ...

  4. MSsql 服务器之间远程及其链接查询

    先指定端口1433(SQL,协议里面设置) 然后启用 菜单-程序-外围服务应用配置-服务和连接时外围应用配置 试试远程连接 成功连接OK 下面示例链接服务器.上面远程是必须走的一步动作. --创建链接 ...

  5. mysql小误区关于set global sql_slave_skip_counter=N命令

      背景知识1:     在主从库维护中,有时候需要跳过某个无法执行的命令,需要在slave处于stop状态下,执行 set global sql_slave_skip_counter=N以跳过命令. ...

  6. ado.net access oracle dataset via store procedure

    使用存储过程返回结果集,并绑定到ado.net对象中在sql server里面是非常直观的. 1: create procedure GetAllRecords 2: as 3: select * f ...

  7. LINUX内核分析第七周学习总结:可执行程序的装载

    LINUX内核分析第七周学习总结:可执行程序的装载 韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/cours ...

  8. 循序渐进Python3(三) -- 3 -- 内置函数

    上一篇我们又介绍了26个Python内置函数.现回忆一下吧: 1.all 2.any 3.ascii 4.bin 5.bool 6.bytes 7.bytearray 8.callable 9.chr ...

  9. 117 FP页面无法查看

    用户表示117 FP页面无法查看,提示如下错误: 跟进: 1.进入FP服务器可看到以下错误 这个错误的框就表示FP的一个进程报错,自动断掉了,需要重新跑一次EXIT,INIT,PLAN,EXPORT, ...

  10. perl中的运算符

    字符计算的运算符