059day(继承和复合关系,覆盖和保护成员)
来源:互联网 发布:大数据hadoop开发平台 编辑:程序博客网 时间:2024/06/04 00:34
17221070411-陈国佳总结《2017年12月8日》【连续059天】
标题:继承和复合关系,覆盖和保护成员;
内容:
A.继承关系和复合关系:
a).继承:“是”关系
1.基类A,B是基类A的一个派生类;
2.逻辑上要求:“一个B对象也是一个A对象”;
使用:如果我们已经定义了类MAN,又想要定义类WOMAN,这两类有共同之处,但我们不能使其中一类成为另一类的派生类,逻辑上不合理,
所以要先定义一个基类HUMAN;
b).复合:“有”关系
1.类C中“有”成员变量k,k是类D的对象,则C和D是复合关系;
2.逻辑上要求:“D对象是C对象的固有属性或组成部分”;
举例讨论:
1.写一个点类,在写一个圆类;
通过继承:class CPoint {double x,y;}; class CCircle::public CPoint{double r;};
错误,因为一个圆并不是一个点;
应该改为复合:class CPoint {double x,y;}; class CCircle{ double r; CPoint center;};
2.写一个小区管理程序,需要定义一个“业主类”,一个“狗”类;狗有一个主人(业主),业主可至多拥有10条狗;
复合关系:
(1)class CDog;class CMaster{ CDog dogs[10]}; class CDog{ CMaster m;};
循环定义,出错!
(2)class CDog;class CMaster{CDog*dogs[10];}; class CDog{CMaster m;};
//当我们修改一条狗的主人时,也要修改其主人的其它狗,过于麻烦;
(3).class CMaster; class CDog{CMaster*pm;}; class CMaster{CDog dogs[10];};
//当我们修改狗时,必须通过其主人,可行,但不实用;
(4).class CMaster; class CDog{ CMaster*pm;}; class CMaster{ CDog*dogs[10];};
正确,这种关系有时也叫“知道”;
B.覆盖和保护成员;
覆盖:派生类定义一个和基类同名的成员。
在派生类中访问这类成员,缺省时是访问派生类中定义的成员。想要通过派生类访问基类定义的同名成员时,要使用作用域符号::。
protected:
可被下列函数访问:
基类的成员,友元函数
派生类的成员函数可以访问当前对象的基类的保护对象;
明日计划:派生类的构造函数;
- 059day(继承和复合关系,覆盖和保护成员)
- 详谈C++保护成员和保护继承
- 保护继承 和 各类继承关系的属性(图)
- 继承和复合
- 复合和继承
- 类的两种关系——继承和复合
- C++成员函数的重载,继承,覆盖和隐藏
- C++ 公有继承、保护继承和私有继承中类成员的访问权限的控制
- C++ 公有继承、保护继承和私有继承中类成员的访问权限的控制
- C++ 公有继承、保护继承和私有继承中类成员的访问权限的控制
- C++ 公有继承、保护继承和私有继承中类成员的访问权限的控制
- 保护继承和私有继承
- C++和Java继承关系中方法覆盖的不同
- OC中继承和复合
- 公有继承,私有继承,和保护继承(转载)
- static 继承和覆盖
- Java继承和覆盖
- C++继承中覆盖和隐藏基类成员变量或成员函数
- BZOJ-5090 (二分答案)
- JAVA读取Doc、Docx及注意点
- bzoj3524 [Poi2014]Couriers 主席树
- MongoDB学习第3天,命令行导入json
- 欢迎使用CSDN-markdown编辑器
- 059day(继承和复合关系,覆盖和保护成员)
- 选择排序、冒泡排序、直接插入排序
- C++中前置声明的使用
- 1063. 计算谱半径(20)
- 【Codeforces Round #268(Div 1)】Tree
- swing笔记
- struct和typedef struct
- 设计模式之中介者模式
- BZOJ3890 [Usaco2015 Jan]Meeting Time K短路 Astar || 拓扑DP