声明:
1、为了节省篇幅,头文件和域什么的都没写。另外可能是java转C++,有些叫法可能会不对
2、因初学,都是自己摸索的,有错望指出,勿喷
假设父类声明
Parent.h中如下
class  Parent{
public:
Parent();
~Parent();
virtual void printByParent();
virtual void printVirtual();
virtual void printVirtualAll()=;
void print();
void invoke();
};

Parent.cpp 如下

Parent::Parent(){}

Parent::~Parent(){}
void Parent::printVirtual(){
cout<<"parent_printVirtual"<<endl;
}
void Parent::print(){
cout<<"parent_printf"<<endl;
}
void Parent::printVirtualAll(){
cout<<"parent_printVirtualAll"<<endl;
}
void Parent::printByParent(){
cout<<"parent_printVirtualAll"<<endl;
}
void Parent::invoke(){
this->print();
this->printVirtual();
this->printVirtualAll();
this->printByParent();
}

1、是否是抽象类

带virtual 声明方法的非抽象类:
    如果.h 文件中只有virtual void printVirtual();这样的声明,且在.cpp 文件中实现了。则,这个类是可以初始化的,非抽象类。
抽象类两种情况:
    virtual void printVirtualAll()=0;如果这个类像这样声明了抽象方法,就算他再.cpp文件中实现了,这个类依然是抽象方法,不可直接初始化。
                                                     且无论这个方法在父类有没有实现,子类也必须实现这个方法后,才能成为非抽象方法
    virtual void printVirtual(); 像这样声明了,但是却没有在.cpp文件中实现,则,这个类也是抽象类。
                                               如果这样声明的方法在父类中都有实现,其子类不覆写,依然是非抽象类
2、继承关系
有子类 ChildA 
ChildA.h 如下
class ChildA:public Parent{
public:
ChildA();
~ChildA();
void printVirtual();
void print();
void printVirtualAll();
};

ChildA.app 如下

ChildA::ChildA(){}
ChildA::~ChildA(){}
void ChildA::print(){
cout<<"childA print"<<endl;
}
void ChildA::printVirtual(){
cout<<"childA printVirtual"<<endl;
}
void ChildA::printVirtualAll(){
cout<<"childA printVirtualAll"<<endl;
}
运行输出如下
 
结果说明,只有父类声明了为virtual 的时候,子类覆写才有意义。
 
相关的说明:
void print(){//这个方法不是虚方法,子类自己实现,不影响
void printVirtualAll(){//这个虚方法实现不实现都没关系,因为声明为=0,但是如果调用Parent::printVirtualAll还是有效的
void printByParent(){//这个虚方法在这里设定测试为只父类实现,子类没有实现,正常调用
virtual void printVirtual()// 这个虚方法在子类和父类中都有实现,子类对像输出是自己的实现

C++初学 virtual 相关的更多相关文章

  1. 初学JQuery相关知识点

    [简单的JQuery]注册事件的函数. $(document).ready(function(){}) [JQuery提供的函数]$.map(array,fn) 对数组array中每个元素调用fn函数 ...

  2. 一个RESTful+MySQL程序

    前言 本章内容适合初学者(本人也是初学者). 上一章内容(http://www.cnblogs.com/vanezkw/p/6414392.html)是在浏览器中显示Hello World,今天我们要 ...

  3. windows下vagrant的安装使用

    vagrant是简便虚拟机操作的一个软件,而使用虚拟机有几个好处: 1.为了开发环境与生产环境一致(很多开发环境为windows而生产环境为linux),不至于出现在开发环境正常而移步到正式生产环境时 ...

  4. 嵌入式单片机STM32应用技术(课本)

    目录SAIU R20 1 6 第1页第1 章. 初识STM32..................................................................... ...

  5. malefile

    什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要 ...

  6. JBoss环境搭建及部署Web项目

    http://blog.csdn.net/pop303/article/details/7210290 赶在年前学习了一下JBOSS,之前觉得JBOSS相关资料会有很多,不过现在发现很少,在亚马逊出也 ...

  7. iOS多线程之超实用理论+demo演示(可下载)

    目录 背景简介 GCD.OperationQueue 对比 核心理念 区别 GCD 队列 串行队列(Serial Queues) 并发队列(Concurrent Queues) 串行.并发队列对比图 ...

  8. 基础知识系列☞Abstract和Virtual→及相关知识

    转载地址→http://www.cnblogs.com/blsong/archive/2010/08/12/1798064.html 在C#的学习中,容易混淆virtual方法和abstract方法的 ...

  9. 初学ctypes:打开进程并返回相关信息

    直接上代码: 1. my_debugger_defines.py 定义相关结构体(在后面创建进程及返回信息时,传参可用到) from ctypes import * # Let's map the M ...

随机推荐

  1. Callable+Future+newFixedThreadPool的应用

    最近在处理很多的数据,数据量比较大,但是处理的相对简单一些,没有什么复杂的业务逻辑,然后就使用了多线程去处理.因为一直停留在Thread和Runnable的知识中,项目中使用Callable,刚好可以 ...

  2. jquery layer弹窗弹层插件 (转)

    /* 先去官网下载最新的js  http://sentsin.com/jquery/layer/ ①引用jquery ②引用layer.min.js */ 触发弹层的事件可自由绑定,如: $('#id ...

  3. 关于原根的存在性及个数(Primitive Root Theorem)

    我在RSA学习总结的第三部分关于Mille-Rabin素数测试的正确性证明里需要用到此定理,由于证明太长,故另开一章于此.(为啥我说话突然文绉绉了Orz,可能是这周辩论打多了) 结论是对素数p,mod ...

  4. SpringMVC(三)-- 视图和视图解析器、数据格式化标签、数据类型转换、SpringMVC处理JSON数据、文件上传

    1.视图和视图解析器 请求处理方法执行完成后,最终返回一个 ModelAndView 对象 对于那些返回 String,View 或 ModeMap 等类型的处理方法,SpringMVC 也会在内部将 ...

  5. Redis使用记录-相关资料汇总

    1 redis在centos上的安装 http://www.cnblogs.com/hanyinglong/p/5036558.html 2 redis在windows上的可视化GUI工具 https ...

  6. 【javascript】谈谈HTML5 ——HTML兽进化, H5兽!

    作为一名Web开发者,可能你并没有对这个“H5”这个字眼投入太多的关注,但实际上它早已不知不觉进入到你的开发中,并且总有一天会让你不得不正视它,了解它并运用它   打个比方:<海贼王>中的 ...

  7. 【前端基础】动态脚本与JSONP

    博主入职两个月了,越来越感受到打好基础对于前端工程师的重要性,在向着狂拽酷炫的框架&构建工具高速狂奔之前,必须有一个坚实的基础打底,才不至于轻易翻车.所以博主最近一直在恶补<JS高级程序 ...

  8. Web桌面应用框架2:著名的WEB桌面应用分析

    前一篇文章里,分析了包括NW.js和electron这种纯JS框架在内的几种Web桌面应用开发方式,实际上还有一种最古老的方式,那就是嵌入WebView的方式. 嵌入WebView的方式和整个程序都是 ...

  9. ADO.NET的学习

    ADO.NET的几个对象 Connection:管理数据库的连接 Command:对数据库执行命令 DataReader:数据流读取器,返回的数据都是快速的且只是"向前"的数据流. ...

  10. Tinyhttpd 代码学习

    前阵子,参加了实习生面试,被面试官各种虐,问我说有没有读过一些开源的代码.对于只会用框架的我来说真的是硬伤啊,在知乎大神的推荐下在EZLippi-浮生志找了一些源代码来阅读,于是从小型入手,找了Tin ...