对于面向对象而言,多态是最有用的基本特性之一,相对于函数指针,易用得多。下面看下c++继承和多态行为的基本特性,最后说明下和java的基本差别。

首先定义父类和子类。

base.h

#pragma once
class Base
{
public:
int i;
Base(void);
~Base(void);
virtual void testDynCast();
};

base.cpp

#include "stdafx.h"
#include "Base.h"
#include <iostream>
using namespace std;
Base::Base(void)
{
} Base::~Base(void)
{
} void Base::testDynCast() {
cout << i << endl;
}

Derived.h

#pragma once
#include "base.h"
class Derived :
public Base
{
public:
void testDynCast();
Derived(void);
~Derived(void);
};

Derived.cpp

#include "stdafx.h"
#include "Derived.h"
#include <iostream>
using namespace std;
Derived::Derived(void)
{
} Derived::~Derived(void)
{
} void Derived::testDynCast() {
cout << (i * i) << endl;
}

基本使用:

int _tmain(int argc, _TCHAR* argv[])
{
//多态测试
Derived derived = Derived();
derived.i = ;
derived.testDynCast();
Base* dp1 = &derived;
// 继承测试
if(Derived *dp = dynamic_cast<Derived*>(dp1)) {
dp->testDynCast();
} Base base = Derived();
base.i = ;
base.testDynCast();
dp1 = &base;
// 继承测试
if(Derived *dp = dynamic_cast<Derived*>(dp1)) {
dp->testDynCast();
}
cout << "继承测试结束" << endl;
// 继承测试结束
}

输出如下:

10000
10000
100
继承测试结束

从上面的代码和结果可以看出,c++跟java的要求或差别至少包括:

1、c++不要求类名和文件名保持一致,不过保持一致总是一个好习惯;

2、对于非抽象类,在定义对象时所使用的c++类型决定了实际类型,至于具体赋值的是什么类型应该是自动截掉了(虽然没有本质性差别,但是对于习惯了java的人员而言,明显多此一举)。

3、为了使用多态,必须至少有一个方法声明为虚函数。

刚想到反射(一般而言,如果要写一个框架比如RPC的话,掌握反射是必不可少的)的问题,总体而言,可以参考下面两个链接:

https://technet.microsoft.com/zh-cn/library/7k3448yy.aspx

http://www.tuicool.com/articles/VJRVVrQ

实现本身而言,应该没有想象那么难。

c++继承、多态以及与java的行为差异之处的更多相关文章

  1. 继承多态绕点 Java篇

    上一篇把C#语言的继承,多态里的特殊的情况做了一下总结,其实那一部分代码都是从Java翻译过去的,今天来总结一下Java在这种情况下是怎么调用的. 上一篇我们说的是:1.多态,只在多态系里方法调用,很 ...

  2. java面向对象(封装-继承-多态)

    框架图 理解面向对象 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程强调的是功能行为 面向对象将功能封装进对象,强调具备了功能的对象. 面向对象是基于面向过程的. 面向对象的特点 ...

  3. java类的封装 继承 多态

    1.猜数字小游戏 package cn.jiemoxiaodi_02; import java.util.Scanner; /** * 猜数字小游戏 * * @author huli * */ pub ...

  4. [Java]重载,重写以及继承,多态的区别

    转自:http://android.blog.51cto.com/268543/53181 什么是多态?它的实现机制是什么呢?重载和重写的区别在那里?这就是这一次我们要回顾的四个十分重要的概念:继承. ...

  5. Java继承多态中的方法访问权限控制

    java中的方法天生具有继承多态特性,这点与C++有很大不同(需要在父类方发上加virtual关键字),但用起来确实方便了许多. 最简单的继承多态 声明一个接口BaseIF,只包含一个方法声明 pub ...

  6. Java三大特性(封装,继承,多态)

    Java中有三大特性,分别是封装继承多态,其理念十分抽象,并且是层层深入式的. 一.封装 概念:封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别:将抽象得到的数据 ...

  7. Java开发知识之Java的继承多态跟接口*

    Java开发知识之Java的继承多态跟接口 一丶继承 1.继承的写法 在Java中继承的 关键字是 extends 代表一个类继承另一个类. 继承的含义以及作用: 继承就是基于某个父类的扩展.制定出来 ...

  8. -1-2 java 面向对象基本概念 封装继承多态 变量 this super static 静态变量 匿名对象 值传递 初始化过程 代码块 final关键字 抽象类 接口 区别 多态 包 访问权限 内部类 匿名内部类 == 与 equal

    java是纯粹的面向对象的语言 也就是万事万物皆是对象 程序是对象的集合,他们通过发送消息来相互通信 每个对象都有自己的由其他的对象所构建的存储,也就是对象可以包含对象 每个对象都有它的类型  也就是 ...

  9. java继承多态和抽象类接口

    一.继承 通过扩展一个已有的类,并继承该类的属性和行为,来创建一个新的类.已有的称为父类,新的类称为子类(父类派生子类,子类继承父类).(1)继承的优点:    ①代码的可重用性:    ②父类的属性 ...

随机推荐

  1. 2.4scope

    name_scope variable_scope scope (name_scope/variable_scope) from __future__ import print_function im ...

  2. win10 64bit安装redis及redis desktop manager的方法

    下载地址: MSOpenTech/redis——Github 下载后随便解压到一个地方 在 命令行 启动服务端 命令内容如下: redis-server.exe redis.windows.conf ...

  3. htop详解

    一.Htop的使用简介 大家可能对top监控软件比较熟悉,今天我为大家介绍另外一个监控软件Htop,姑且称之为top的增强版,相比top其有着很多自身的优势.如下: 两者相比起来,top比较繁琐 默认 ...

  4. android 控制POS机图文打印(二)

    上一篇文章结束了ESC/POS的指令集,没看过的可以去看一下,可以当作工具文档来使用的 android 控制POS机图文打印(一) 这一篇正式介绍如何使用POS机来打印图文信息. 首先介绍一下,ESC ...

  5. C++ polymorphism Virtual Function 多态 虚函数

    Polymorphism in C++ https://www.tutorialspoint.com/cplusplus/cpp_polymorphism.htm https://github.com ...

  6. train_test_split, 关于随机抽样和分层抽样

    https://zhuanlan.zhihu.com/p/49991313 在将样本数据分成训练集和测试集的时候,应当谨慎地考虑一下是采用纯随机抽样,还是分层抽样. 通常,数据集如果足够大,纯随机抽样 ...

  7. java数据库三大范式

    引用知乎网友@ 王红波的回答 一范式就是属性不可分割.属性是什么?就是表中的字段.不可分割的意思就按字面理解就是最小单位,不能再分成更小单位了.这个字段只能是一个值,不能被拆分成多个字段,否则的话,它 ...

  8. PHP 常用命令行

    1.PHP运行指定文件 php -f test.php (-f 可省略) 2.命令行直接运行PHP代码 php -r "phpinfo();" 如果结果太长,还可以 php -r ...

  9. PHP解决搜索时在URL地址栏输入中文字符搜索结果出现乱码

    这 个问题的出现的前提是本站代码采用utf-8格式,php空间当页面停留在搜索页面时,在浏览器的地址栏输入中文的关键字进行搜索时会出现乱码,在网上查找资料说 明,是因为浏览器默认将url中的中文字符编 ...

  10. C和C++不容易发现的区别

    1.char指针指向字符串常量 当下面的代码写到.c文件中时,可以正常运行;而写到.cpp文件中就会报错:无法从“const char [6]”转换为“char *”. char * c = &quo ...