C++进阶--公有继承的二元性
//###########################################################################
/*
* 公有继承的两元性
*
* - 接口的继承
* - 实现的继承
*/
class Dog {
public:
virtual void bark() = 0; //只继承了接口
void run() { cout << "I am running."; } //既继承了接口,也继承了实现
virtual void eat() { cout << "I am eating. "; }
protected:
void sleep() { cout << " I am sleeping. "; } //只继承了实现,没继承接口
};
class Yellowdog : public Dog{
public:
virtual void bark() { cout << "I am a yellow dog.\n";}
void iSleep() { sleep(); }
};
/*
* C++中继承的类型:
* 1. 纯虚公有函数 - 只继承接口
* 2. 非虚公有函数 - 继承接口和实现
* 3. 非纯虚公有函数 - 继承接口和默认实现
* 4. 保护函数 - 只继承实现
*
* 作为程序设计师,有必要分清接口和实现的概念
*/
/*
* 接口继承用于
*
* 1. Subtyping
* 2. Polymorphism
*/
virtual void bark() = 0;
/*
* 陷阱:
* -- 小心接口膨胀
* -- 接口不应该显示实现
*/
/*
* 实现继承
* - 会增加代码的复杂性 //在写派生类的时候需要关注基类,在改基类的时候的还要时刻小心有没有破坏派生类
* - 不鼓励Not encouraged
*/
public:
void run() { cout << "I am running."; }
virtual void eat() { cout << "I am eating. "; }
protected:
void sleep() { cout << " I am sleeping. "; }
/*
* 实现继承的指导原则:
* 1. 不要为了代码重用而使用继承,使用组合替代
* 2. 最小化基类的实现,基类要小巧
* 3. 最小化实现继承的层数
*/
/*
* 继承是否是魔鬼 ???
*
* 继承有时候有用,但是往往过度使用了
*/
C++进阶--公有继承的二元性的更多相关文章
- C++公有继承、私有继承以及友元
公有继承: 基类的成员在派生类中维持原来的访问权限,基类的publice成员为派生类的public成员,基类的protected成员为派生类的protected成员,基类的private成员在派生类的 ...
- C++公有继承
is-a.has-a和like-a.组合.聚合和继承 两组概念的区别 - cbk861110的专栏 - 博客频道 -CSDN.NET http://blog.csdn.net/cbk861110/ar ...
- ASP.NET MVC URL重写与优化(进阶篇)-继承RouteBase
原文地址:http://www.51csharp.com/MVC/882.html ASP.NET MVC URL重写与优化(进阶篇)-继承RouteBase玩转URL 引言-- 在初级篇中,我们 ...
- C++学习笔记14,private/protected/public继承,私有继承,保护继承,公有继承(五)(总结)
各种继承方式: 特征 公有继承 保护继承 私有继承 公有成员变为 派生类的公有成员 派生类的保护成员 派生类的私有成员 保护成员变为 派生类的保护成员 派生类的保护成员 派生类的私有成员 私有成员变为 ...
- C++ 中私有继承、保护继承与公有继承
区别 下面通过一个示例来介绍三种继承的区别. 定义一个基类(假设为一个快退休的富豪): class RichMan { public: RichMan(); ~RichMan(); int m_com ...
- C++中公有继承、保护继承、私有继承的区别
公有继承时基类中各成员属性保持不变,基类中private成员被隐藏.派生类的成员只能访问基类中的public/protected成员,而不能访问private成员:派生类的对象只能访问基类中的publ ...
- C++公有继承、保护继承和私有继承
C++中的继承方式有: public.private.protected三种(它们直接影响到派生类的成员.及其对象对基类成员访问的规则). (1)public(公有继承):继承时保持基类中各成员属性不 ...
- C++_类继承2-多态公有继承
有时候希望同一个方法在派生类和基类中的行为是不同的.换句话说,方法的行为取决于调用该方法的对象.这种较复杂的行为称为多态——具有多种形态.即同一种方法其行为随上下文而异.有两种重要的机制可用于实现多态 ...
- c++ 公有继承的赋值兼容规则
赋值兼容规则是指在需要基类对象的任何地方都可以使用公有派生类的对象来替代.通过公有继承,派生类得到了基类中除构造函数.析构函数之外的所有成员,而且所有成员的访问控制属性也和基类完全相同.这样,公有派生 ...
随机推荐
- Js中的判空
1.JS 中判断 undefined JavaScript 中有两个特殊数据类型:undefined 和 null var test= undefined; if (typeof(test) == u ...
- Oracle使用笔记(一)
目录 一.创建表: 二.编辑表数据: 三.Oracle基本数据类型: (一) 字符串类型 1.1:CHAR类型 CHAR(size [BYTE | CHAR]) 1.2: NCHAR类型 1.3 VA ...
- MyBatis like函数使用注意事项
百分号后面必须要加上空格,不然会将后面的字符串全部都黏在一起,导致sql语句运行报错
- [动态差分+二维前缀和][小a的轰炸游戏]
链接:https://ac.nowcoder.com/acm/contest/317/E来源:牛客网 题目描述 小a正在玩一款即时战略游戏,现在他要用航空母舰对敌方阵地进行轰炸 地方阵地可以看做是n× ...
- UVALive-6540 Fibonacci Tree
#include<bits/stdc++.h> using namespace std; int n,m; struct edge { int x; int y; int len; }ed ...
- 【BZOJ2594】【WC2006】水管局长
日……又被傻B错坑了一整天…… 原题: SC省MY市有着庞大的地下水管网络,嘟嘟是MY市的水管局长(就是管水管的啦),嘟嘟作为水管局长的工作就是:每天供水公司可能要将一定量的水从x处送往y处,嘟嘟需要 ...
- golang . xml output with cdata
out put with cdata package main //warning: go version must >=1.6 import ( "encoding/xml" ...
- H3C路由器映射端口到外网
登录路由器web管理端 选择高级设置->虚拟服务器->新增虚拟服务器
- buckaroo 试用
我系统是mac 所以选择的是mac 的版本,官方是支持跨平台的. 安装 mac 版本安装 wget https://github.com/LoopPerfect/buckaroo/releases/d ...
- [转]RPC 框架通俗介绍
关于RPC 你的题目是RPC(远程过程调用,Remote Procedure Call)框架,首先了解什么叫RPC,为什么要RPC,RPC是指远程过程调用,也就是说两台服务器A,B,一个应用部署在A服 ...