对于面向对象而言,多态是最有用的基本特性之一,相对于函数指针,易用得多。下面看下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. 对position的认知观

    position :absolute 认识以前有的理解不正确,以为没有设置left,top 与设置left :0,top : 0是一样的,现在认识为,错误! 没有设置的时候,该absolute元素{由 ...

  2. Elasticsearch 基础理论 & 配置调优

    一.简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作为 ...

  3. Loadrunner之https协议录制回放报错如何解决?(九)

    一.录制中遇到报错27778的问题(如下图1),即关于录制的链接为https开头的问题,分两个步骤解决,如下: 图1 https访问报错解决步骤如下: 1.修改Vuser-->Run-time ...

  4. Shell中的表达式及IF

    #!/bin/bash #你值得收藏的四则表达式运算. val1=1 val2=1 val3=1 val4=1 val5=1 val6=1 val7=1 let val1++ ((val2++)) v ...

  5. linux报错 find: missing argument to `-exec'

    在linux下使用find命令时,报错:find: missing argument to `-exec' 具体执行命令为: find /u03 -name server.xml -exec grep ...

  6. PHP + Ajax处理大数据查询并导出Excel

    思路:使用ajax多次请求服务器,分段生成多个Excel,然后打包压缩成zip,超链接指向下载的文件然后下载. [HTML部分] <input type="button" v ...

  7. asp.net本地读取excel正确。但在iis服务器上就报错 未在本地计算机上注册“Microsoft.ACE.OleDb.12.0”提供程序

    本地vs2010可以上传ecxel文件.并读取数据,但部署到本地IIS.并访问.则提示: 未在本地计算机上注册“Microsoft.ACE.OleDb.12.0”提供程序 首先:确保安装了Micros ...

  8. unp第七章补充之TCP半开连接与半闭连接

    半打开(Half-Open)连接和半关闭(Half-Close)连接.TCP是一个全双工(Full-Duplex)协议,因此这里的半连接"半"字就是相对于全双工的"全&q ...

  9. 非线性方程(组):MATLAB内置函数 solve, vpasolve, fsolve, fzero, roots [MATLAB]

    MATLAB函数 solve, vpasolve, fsolve, fzero, roots 功能和信息概览 求解函数 多项式型 非多项式型 一维 高维 符号 数值 算法 solve 支持,得到全部符 ...

  10. Js中split()方法的正确使用

    通过 js 获取 QueryString (location.search部分) 参数很常见,网上代码也满天飞.不过现在的框架,基本上都通过路由伪静态了,把以前的 QueryString 变成了pat ...