现在位置: 首页 > 自动控制 > 工业·编程 > 文章
1. 虚函数和纯虚函数可以定义在同一个类(class)中,含有纯虚函数的类被称为抽象类(abstract class),而只含有虚函数的类(class)不能被称为抽象类(abstract class)。 2. 虚函数可以被直接使用,也可以被子类(sub class)重载以后以多态的形式调用,而纯虚函数必须在子类(sub class)中实现该函数才可以使用,因为纯虚函数在基类(base class)只有声明而没有定义。 3. 虚函数和纯虚函数都可以在子类(sub class)中被重载,以多态的形...
阅读全文
虚函数为了重载和多态的需要,在基类中是有定义的,即便定义是空,所以子类中可以重写也可以不写基类中的此函数! 纯虚函数在基类中是没有定义的,必须在子类中加以实现,很像java中的接口函数! 虚函数 引入原因:为了方便使用多态特性,我们常常需要在基类中定义虚函数。 class Cman { public: virtual void Eat(){……}; void Move(); private: }; class CChild : public CMan { public: virtual void Eat(){……}; private: }; ...
阅读全文
2012-11-25 09:14 工业·编程 ⁄ 共 1835字 暂无评论
先看下面一段程序: #include <iostream> using namespace std; class Person { public: virtual ~Person()                    //加了virtual,讲析构函数声明为虚函数 {    cout << "Person::~Person()" << endl; } }; class Student : public Person { ...
阅读全文
    在定义一个基类时, 应该把虚函数定义为protected: 类型, 这样基类的对象不能直接调用该接口。而把开放与否的控制权交给子类。在子类里如果把该接口重新定义为public则开放, 否则依然不对外开放。     在类的定义中, 如果是虚函数应该尽量定义其为保护类型。如果不是虚函数应尽量定义为共有类型。 虚函数的作用:        为什么要定义虚函数,是因为在...
阅读全文
2012-11-25 09:03 工业·编程 ⁄ 共 2154字 暂无评论
    最近面试c++研发的职位,面试官们问到最多的问题的什么是虚函数,虚函数的作用,为什么要有虚函数以及虚函数的使用等等相关的问题。经过各种资料的查找,我觉得还是要从头到尾的重新认识一下虚函数。     我们都知道,c++为了与c语言能够兼容,c++做出了很大的牺牲,包括保留了struct关键字,还有编译期间添加了好多隐藏的代码。但是虚函数却不能与c语言实现兼容。而且有了虚函数,类的数据...
阅读全文
2012-11-25 08:57 工业·编程 ⁄ 共 869字 暂无评论
虚函数与纯虚函数的相同点:    1.都可以在子类中重载,以多态的形式被调用。    2.通常都存在于抽象基类中,被继承的子类重载,目的是提供一个统一的接口。    3.都不能使用static标示符(原因:虚函数是动态绑定的) 虚函数与纯虚函数的不同点:    1.虚函数为了重载和多态的需要,已在类中被定义(即便定义为空),所以在子类中可以重写其功能,也可以不用改写。   &#...
阅读全文
2012-11-25 08:54 工业·编程 ⁄ 共 1602字 暂无评论
     继承作为面向对象的基本特征之一,其使用率极高。不管是为了实现软件的基本功能,还是再程序的重构的过程中,我们总是会用到继承机制。正是因为其用途极为广泛,而且使用简单,大众程序员对其真正的内部实现机制的探究不是很深。而且,在大部分情况下,我们对继承的使用方法是错误的。下面用例子来说明问题。 class Animal {     public:       ...
阅读全文
2012-11-25 08:52 工业·编程 ⁄ 共 1773字 暂无评论
    首先,重复一下虚拟继承与普通继承的区别有: 假设derived 继承自base类,那么derived与base是一种“is a”的关系,即derived类是base类,而反之错误; 假设derived 虚继承自base类,那么derivd与base是一种“has a”的关系,即derived类有一个指向base类的vptr。     因此虚继承可以认为不是一种继承关系,而可以认为是一种组合的关系。因为虚继承有着“继承”两个关键字,那么大部分人都认...
阅读全文
      在早期的c++ 编译器中无法在class的定义区为static const member(这里的member必须为整数类型int、char、enum等)赋初值,而晚些的c++编译器可能可以这么做。但是const member的使用习惯是在定义的时候赋值,并且在其他的地方不能改变其值。所以,这就形成了矛盾,使得我们大部分时候而不得不将放弃使用static const member。下面的代码即为此种矛盾: class object {    ...
阅读全文
2012-11-25 08:48 工业·编程 ⁄ 共 617字 暂无评论
C++中实现多态通过函数重载(静态多态)和虚函数(动态多态)两种方式实现,通过将基类中函数定义为虚函数并在派生类中重新定义,从而实现成员函数的动态重载,另外,很多情况下基类不需要生成具体对象,这时通过将基类中成员函数定义为纯虚函数即可实现。具体方法如下: virtual return_type member_function(parameters list)=0; 此时含此函数的积累称为抽象类,其派生类中必须对该函数进行重新定义。多态的关键之处就是一切...
阅读全文