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