多态也是C++中的一个重要的方面,多态和动态类型,虚函数本质上是指相同的事情。
1 虚函数
类中的成员函数原型前面加上virtual 表面这个函数是个虚函数。虚函数的目的是为了在继承它的派生类中重新定义这个函数,以便于通过基类的指针或引用在运行时对派生类的函数进行调用。
2 派生类和虚函数
派生类一般情况下要重定义所继承的虚函数,有几个注意事项。
虚函数的声明必须和基类中...
分类:
编程语言 时间:
2014-07-26 15:31:24
阅读次数:
265
继承类的范围,构造函数和拷贝控制
当用派生类执行函数的时候,首先会在当前的类里面找
如果找不到就一级一级地往上找。
Name Lookup Happens at Compile Time
class Quote
{
public:
Quote()=default;
Quote(const string &book, double sales_price)...
分类:
编程语言 时间:
2014-07-26 15:29:42
阅读次数:
542
override1. override是派生类用来重写基类中方法的;2. override不能重写非虚方法和静态方法;3. override只能重写用virtual、abstract、override修饰的方法;4.不能使用修饰符 new、static、virtual 或 abstract 来修改 ...
分类:
其他好文 时间:
2014-07-26 14:28:00
阅读次数:
186
封装,继承,多态是C++的三大基本概念,这里着重总结一下继承相关的东西
1 类派生列表
类派生列表指定派生类要继承的基类,派生列表中有一个或者多个基类如:
class B : public A1,protected A2,private A3
但是单继承时最常见的,多继承不多见
2 派生类的定义
派生类继承时,会包含父类的所有成员,即便私有成员不能被访问。父类中的虚函数...
分类:
编程语言 时间:
2014-07-26 01:56:26
阅读次数:
296
这个看了蛮多遍的,但是由于有一些一直不用,老是忘记,记录一下:)private 成员只能由同一个类(class)类型中的其他成员访问。family 成员可由派生类访问,不管那些类型是否在用一个程序集中(C#用protected)。assembly 成员可由同一个程序集中的任何代码访问.(C#用int...
分类:
其他好文 时间:
2014-07-26 00:44:46
阅读次数:
235
在C++primer 第4版的 15章 15.2.5中有下面这样一段提示:
“注解:派生类可以恢复继承成员的访问级别,但不能使访问级别比基类中原来指定的更严格或者更宽松。”
在vs2010中经过验证,这段话是错误的。具体见以下代码:
//Base.h
#pragma once
#include
using namespace std;
class Base
{
public:
Base(...
分类:
编程语言 时间:
2014-07-25 11:18:11
阅读次数:
233
访问控制和继承
public: 公有类型
private: 私有类型
protected: 保护类型
当一个类的成员定义为public,就能够在类外访问,包括它的派生类。
当一个成员定义为private,它仅能在类内访问,不能被它的派生类访问。
当一个成员定义为proteced,它仅能在类内访问,但是能被它的派生类访问。
当一个成员没有指定访问说明符时,默认为private。
...
分类:
编程语言 时间:
2014-07-25 11:16:01
阅读次数:
314
??
昨天探讨了访问者模式,今天来说说桥接模式:
定义:将抽象部分与它的实现部分分离,是它们可以独立地变化。
这并不是说,让抽象类与其派生类分离,因为这没有任何意义。实现指的是抽象类和它的派生类用来实现自己的对象。
理解:实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合。
下面讲一下合成/聚合复用原则:
合成/聚合复用原则就...
分类:
其他好文 时间:
2014-07-25 11:10:31
阅读次数:
229
建造者模式:将复杂对象的建造过程抽象出来,使这个抽象过程的不同实现方法可以构造出不同属性的对象。当构造一个对象时,构造的流程是相同的,但每一个步骤对应的具体操作是有差异的。这时,可以将需要进行的初始化作为虚函数固定到一个抽象基类中,这个抽象基类称为抽象建造者类;而具体的实现则由派生类中重写的虚函数定义,这个派生类称为具体建造者类。有了具体的建造步骤,下一步就是要按顺序调用这些步骤,这是由一个称为指...
分类:
其他好文 时间:
2014-07-24 23:16:44
阅读次数:
205
java和某些面向对象语言(如c++)在实现继承的不同之处在于java只支持单继承,不支持多重继承。即java中一个类只能继承于另一个类。我们将被继承的类称之为父类(基类),继承类称之为子类(派生类)。在java中用关键字extends来实现单继承。在前面所讲已知,实现继承关系的类之间..
分类:
编程语言 时间:
2014-07-24 17:57:32
阅读次数:
255