1.虚函数

#include<iostream.h>

class Base
{
public:
void print()
{
cout<<"Base"<<endl;
}
}; class Son:public Base
{
public:
void print()
{
cout<<"Son"<<endl;
}
}; void fun(Base *obj)
{
obj->print();
} int main()
{
Base base;
Son son;
fun(&base);
fun(&son);
return 0;
}

类Base和Son中都有print方法,Son继承Base类。在主函数中分别建立Base和Son的对象,在fun函数中调用对象的print()方法。运行结果如下

从结果中可以看出不论传的是父对象的地址还是子对象的地址,最终调用的都是父对象的print()方法。如果希望传父对象时调用父对象print()方法,传子对象时调用子对象的print()方法。则只需要将父类的print方法声明成虚函数就行。virtual void print(){}。

2.纯虚函数

(1)纯虚函数的定义

virtual 返回类型 函数名 (<参数>)=0;

#include<iostream.h>

class Shape
{
public:
virtual void show()=0;
}; class Circle:public Shape
{
public:
void show()
{
cout<<"Circle"<<endl;
}
}; class Rect:public Shape
{
public:
void show()
{
cout<<"Rect"<<endl;
}
}; void fun(Shape *shape)
{
shape->show();
} int main()
{
//Shape s;//纯虚函数的类不能创建对象
Circle circle;
Rect rect;
fun(&circle);
fun(&rect);
return 0;
}


有纯虚函数的类不能创建对象。在基类中只作方法的声明,具体的实现要由其子类来实现。

c++虚函数的学习的更多相关文章

  1. C++ 虚函数机制学习

    致谢 本文是基于对<Inside the c++ object model>的阅读和gdb的使用而完成的.在此感谢Lippman对cfront中对象模型的解析,这些解析帮助读者拨开迷雾.此 ...

  2. C++ 虚函数与纯虚函数 浅析

    [摘要] 在虚函数与纯虚函数的学习中.要求理解虚函数与纯虚函数的定义,了解虚函数与纯虚函数在实例化上的差异.掌握两者在实现上的必要性.熟悉纯虚函数在子类与孙类的函数类型.本文即针对上述问题展开阐述. ...

  3. C++学习 - 虚表,虚函数,虚函数表指针学习笔记

    http://blog.csdn.net/alps1992/article/details/45052403 虚函数 虚函数就是用virtual来修饰的函数.虚函数是实现C++多态的基础. 虚表 每个 ...

  4. (C/C++学习)5.C++中的虚继承-虚函数-多态解析

    说明:在C++学习的过程中,虚继承-虚函数经常是初学者容易产生误解的两个概念,它们与C++中多态形成的关系,也是很多初学者经常产生困惑的地方,这篇文章将依次分别对三者进行解析,并讲述其之间的联系与不同 ...

  5. C++学习基础十二——纯虚函数与抽象类

    一.C++中纯虚函数与抽象类: 1.含有一个或多个纯虚函数的类成为抽象类,注意此处是纯虚函数,而不是虚函数. 2.如果一个子类继承抽象类,则必须实现父类中的纯虚函数,否则该类也为抽象类. 3.如果一个 ...

  6. 【2016-10-13】【坚持学习】【Day4】【virtual 虚函数】

    定义一个基类,有一个虚函数 定义三个子类,分别继承,重写,New,这个虚函数   abstract class Test { public virtual void Prinf() { Console ...

  7. c++学习-虚函数

    #include <iostream> using namespace std; class common{ public: virtual void hello(){cout<&l ...

  8. C++学习25 纯虚函数和抽象类

    在C++中,可以将成员函数声明为纯虚函数,语法格式为: ; 纯虚函数没有函数体,只有函数声明,在虚函数声明结尾加上=0,表明此函数为纯虚函数. 最后的=0并不表示函数返回值为0,它只起形式上的作用,告 ...

  9. C++学习23 虚函数详解

    虚函数对于多态具有决定性的作用,有虚函数才能构成多态.上节的例子中,你可能还未发现虚函数的用途,不妨来看下面的代码. #include <iostream> using namespace ...

随机推荐

  1. 转:前端集锦:十款精心挑选的在线 CSS3 代码生成工具

    今天这篇文章向大家推荐十款非常有用的在线 CSS3 代码生成工具,这些工具能够帮助你方便的生成 CSS3 特效.CSS3 是对 CSS 规范的改善和增强,增加了圆角.旋转.阴影.渐变和动画等众多强大的 ...

  2. 【转】Java生成对应字符串的MD5密码模块

    原文网址:http://www.cnblogs.com/xudong-bupt/archive/2013/05/10/3070899.html (1)一般使用的数据库中都会保存用户名和密码,其中密码不 ...

  3. mklink命令转移win7系统盘文件夹users和programdata(附xp的方法)

    mklink命令转移win7系统盘文件夹users和programdata(附xp的方法)                   使用mklink命令转移文件夹清理臃肿的c盘        (一) 我的 ...

  4. Binary Search Tree Iterator——LeetCode

    Implement an iterator over a binary search tree (BST). Your iterator will be initialized with the ro ...

  5. KMP学习

    刚才看了(连接)写的翻译,把kmp算法的工作过程讲的很不错,kmp算法的核心是next,next为什么要那么赋值?其实就是前缀和后缀的最大匹配值,用这个值在匹配失败的时候可以跳过一个不必要的匹配.   ...

  6. ajax提交数据问题

    加入traditional:true属性 traditional 类型:Boolean 如果你想要用传统的方式来序列化数据,那么就设置为 true.请参考工具分类下面的 jQuery.param 方法 ...

  7. 细聊 Cocoapods 与 Xcode 工程配置

    前言 文章比较长,所以在文章的开头我打算简单介绍一下这篇文章将要讲述的内容,读者可以选择通篇细度,也可以直接找到自己感兴趣的部分. 既然是谈 Cocoapods,那首先要搞明白它出现的背景.有经验的开 ...

  8. lesson4:使用锁Lock来解决重复下单的问题

    demo源码:https://github.com/mantuliu/javaAdvance 中的类Lesson4IndependentLock 在上一节中,我们分析了Lock的源代码并一起实践了粗粒 ...

  9. [Redux] Writing a Todo List Reducer (Adding a Todo)

    Learn how to implement adding a todo in a todo list application reducer. let todo = (state = [], act ...

  10. [Javascript] What is JavaScript Function Currying?

    Currying is a core concept of functional programming and a useful tool for any developer's toolbelt. ...