1,C++面向对象程序设计最重要的原则:
public继承意味着"是一种(isa)"的关系.
例如:
class D : public class B
你便告诉编译器,每一个型别为D的对象同时也是型别为B的对象.
只要是B对象派得上用场的地方,D对象也可以派上用场.
2,看一个实际和理论偏离的例子:
class Bird
{
public:
virtual void fly(); //鸟可以飞
...
};
class Penguin : public Bird//企鹅是一种鸟,
{
...
}
//但是是不能飞的.
可见"适用于所有软件"的完美设计是不存在的,最佳设计,取决于系统希望做什么事.
如果你的程序对于飞行一无所知,那么上述设计也不失为完美有效.
3,如果一定考虑飞行,可以这么做.
class Bird //不声明fly
{
public:
};
class FlyBird : public Bird//可以飞的鸟,
{
public:
virtual void fly();
...
}
class NonFlyBird : public Bird//不可以飞的鸟,
{
public:
... //没有声明fly
}
class Penguin : public NonFlyBird//企鹅是一种鸟,
{
...//没有声明fly
}
分享到:
相关推荐
条款35: 使公有继承体现 "是一个" 的含义 条款36: 区分接口继承和实现继承 条款37: 决不要重新定义继承而来的非虚函数 条款38: 决不要重新定义继承而来的缺省参数值 条款39: 避免 "向下转换" 继承层次 条款40: 通过...
条款35:使公有继承体现是一个的函义 条款36:区分接口继承与实现继承 条款37:绝不要重新定义继承而来的非虚函数 条款38:绝不要重新定义继承而来的缺省参数值 条款39:避免向下转换继承层次 条款40:通过分层来体现有一...
条款32:确定你的public继承塑模出is-a关系 make sure public inheritance models “is-a.” 条款33:避免遮掩继承而来的名称 avoid hiding inherited names. 条款34:区分接口继承和实现继承 differentiate between...
条款32:确定你的public继承塑模出is-a关系 条款33:避免遮掩继承而来的名称 条款34:区分接口继承和实现继承 条款35:考虚virtual函数以外的其他选择 条款36:绝不重新定义继承而来的non-virtual函数 条款37:...
继承:即生活中的包含关系;(大三学生继承于大学生,大学生继承于学生) 特点:可以多层次继承(多少层都可以),但是每次只能继承一个 子类可以调用(继承)父类的属性和方法,不需要再定义属性,方法。 ...
Network Security:Private Communication in a Public World 第二版
文档中通过代码、图片详细的描述了C#五大修饰符的区别。我整理了挺久,希望对大家有用。
TCP_public:TCP_public
而继承包含了虚拟继承和普通继承,在可见性上分为public、protected、private。可见性继承比较简单,而虚拟继承对学习c++的难度较大。 首先,虚拟继承与普通继承的区别有: 假设derived 继承自base类,那么...
public_activity, 轻松跟踪与Github活动的public 相似的模型 PublicActivity public_activity 为你的提供简单的活动跟踪,Mongoid和 Rails 3英镑MongoMapper模型。 简单地说:它记录了已经经更改或者创建的内容,并...
菱形继承在C++继承中是一种复杂的继承关系,存在着二义性和数据冗余的问题,而菱形虚拟继承则是为了解决菱形继承所存在的问题。为了探讨菱形虚拟继承如何解决该问题,我先建立个一个较为简单的菱形继承模型。下面...
通过C++语言中的继承机制,一个新类既可以共享另一个类的操作和数据,也可以在新类中定义已有类中没有的成员。 class CBase { public: void FuncA(void); void FuncB(void); }; //派生类 class CDerive :...
本文实例讲述了ThinkPHP让../Public在模板不解析的方法。分享给大家供大家参考。具体如下: 问题: 模板中包含../Public需要直接输出,但是../Public会被直接替换为当前公共模板目录,最终输出为:/项目目录/Tpl/...
Microsoft Visual Studio 2010做的C# winform类的继承例子,主要代码: public class Person { public string name, sex; public virtual string f_talk() { return "朋友们好。"; } } public class Student : ...
significance of establishing geographic information public service platform, and gives a systemic introduction to the platform contents, the key technologies, the basic functions. Furthermore it gives...
这个Ruby脚本的目的是从iOS项目中提取出类的继承关系,并以JSON格式导出结果文件。利用这个脚本,我们可以便捷地分析一个iOS项目的类结构。 脚本的工作原理是遍历iOS项目中的所有Swift文件,通过解析语法树来找出类...
Fiber.js 是来自 Linkedin 的一个轻量级的 JavaScript 对象继承模型。示例代码:// Animal base class var Animal = Fiber.extend(function() { return { // The `init` method serves as the ...
深度探索C++对象模型,内容概要:多态是一种威力强大的设计机制,允许你继承一个抽象的public接口之后,封装相关的类型,需要付出的代价就是额外的间接性--不论是在内存的获得,或是在类的决断上,C++通过class的pointer...
http: download alipay com public api base alipaydirect zip 网银支付 http: download alipay com public api base alipaydirect bankpay single zip 担保交易收款 http: download alipay com public api base ...
C:001BH PUBLIC table D:00A8H PUBLIC IE B:00A8H.4 PUBLIC ES D:00B8H PUBLIC IP B:0098H.0 PUBLIC RI D:0008H PUBLIC flag B:0098H.1 PUBLIC TI C:0026H PUBLIC main D:0099H PUBLIC SBUF D:0098H ...