c++引入额外开销的情况

#include<iostream>

#include<typeinfo>

using namespace std;

class base

{

public:

virtual void funcA()

{

cout << "base" << endl;

}

};

class derived :public base

{

public:

virtual void funcB()

{

cout << "derived" << endl;

}

};

void funcC(base* p)

{

derived *dp = dynamic_cast<derived *>(p);

if (dp != NULL)

{

dp->funcB();

}

else

{

p->funcA();

}

}

//funcD用typeid操作符

void funcD(base *p)

{

derived* dp = NULL;

if (typeid(*p) == typeid(derived))

{

dp = static_cast<derived*>(p);

dp->funcB();

}

else

p->funcA();

}

int main()

{

base *cp = new derived;

cout << typeid(cp).name() << endl;

cout << typeid(*cp).name() << endl;

funcD(cp);

funcC(cp);

base *dp = new base;

funcC(dp);

funcD(dp);

system("pause");

return 0;

}

运行结果为:

class  base *

class derived

derived

derived

base

base

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-07-29 01:56:18

c++引入额外开销的情况的相关文章

不占用任何额外空间的情况下交换两个数的值

题目 假如有x.y两个数,如何在不占用任何额外空间的情况下交换两个数的值? 思路 平时我们在交换两个数的值时,往往会用一个中间数temp来实现效果,现在需要不占用任何额外空间,自然就不能使用这种寻常的方法了:这里可以有两种方法来实现. 方法一 int x = 5; int y = 10; x = x + y; y = x - y; x = x - y; 先将两个数之和附给x,接着x-y自然就是原本x的值,这时候赋值给y,y就拿到了x原本的值.此时x依然是两个数之和,再进行x-y自然就是原本x的值

python中不引入第三方变量的情况下交换a\b的值

a = 1b = 2a=a+b #a是3b=a-b # b是1a=a-b # a是2print('a:',a)print('b:',b)

《Normal Mapping》

原文地址:https://learnopengl-cn.github.io/05%20Advanced%20Lighting/04%20Normal%20Mapping/ 原文 Normal Mapping 作者 JoeyDeVries 翻译 Django 校对 KenLee 我们的场景中已经充满了多边形物体,其中每个都可能由成百上千平坦的三角形组成.我们以向三角形上附加纹理的方式来增加额外细节,提升真实感,隐藏多边形几何体是由无数三角形组成的事实.纹理确有助益,然而当你近看它们时,这个事实便隐

分布式文件系统元数据服务模型[转]

随着非结构化数据的爆炸,分布式文件系统进入了发展的黄金时期,从高性能计算到数据中心,从数据共享到互联网应用,已经渗透到数据应用的各方各面.对于大多数分布式文件系统(或集群文件系统,或并行文件系统)而言,通常将元数据与数据两者独立开来,即控制流与数据流进行分离,从而获得更高的系统扩展性和I/O并发性.因而,元数据管理模型显得至关重要,直接影响到系统的扩展性.性能.可靠性和稳定性等.存储系统要具有很高的Scale-Out特性,最大的挑战之一就是记录数据逻辑与物理位置的映像关系即数据元数据,还包括诸如

Google之海量数据的交互式分析工具Dremel

Google Dremel 原理 简介 Dremel 是Google 的"交互式"数据分析系统.可以组建成规模上千的集群,处理PB级别的数据.MapReduce处理一个数据,需要分钟级的时间.作为MapReduce的发起人,Google开发了Dremel将处理时间缩短到秒级,作为MapReduce的有力补充.Dremel作为Google BigQuery的report引擎,获得了很大的成功.最近Apache计划推出Dremel的开源实现Drill,将Dremel的技术又推到了浪尖上.

Google Dremel 原理 - 如何能3秒分析1PB

简介 Dremel 是Google 的“交互式”数据分析系统.可以组建成规模上千的集群,处理PB级别的数据.MapReduce处理一个数据,需要分钟级的时间.作为MapReduce的发起人,Google开发了Dremel将处理时间缩短到秒级,作为MapReduce的有力补充.Dremel作为Google BigQuery的report引擎,获得了很大的成功.最近Apache计划推出Dremel的开源实现Drill,将Dremel的技术又推到了浪尖上. Google Dremel设计 根据Goog

Docker 基础

docker 介绍 Docker is the world's leading software container platform. Developers use Docker to eliminate(消除) "works on my machine" problems when collaborating(合作) on code with co-workers. Operators use Docker to run and manage apps side-by-side(并

Lustre I/O性能特点与最佳实践

1 Lustre概述Lustre是面向集群的存储架构,它是基于Linux平台的开源集群(并行)文件系统,提供与POSIX兼容的文件系统接口.Lustre两个最大特征是高扩展性和高性能,能够支持数万客户端系统.PB级存储容量.数百GB的聚合I/O吞吐量.Lustre是Scale-Out存储架构,借助强大的横向扩展能力,通过增加服务器即可方便扩展系统总存储容量和性能.Lustre的集群和并行架构,非常适合众多客户端并发进行大文件读写的场合,但目前对于小文件应用非常不适用,尤其是海量小文件应用LOSF

Docker学习总结(11)——八个Docker的真实应用场景

[编者的话]Flux 7介绍了常用的8个Docker的真实使用场景,分别是简化配置.代码流水线管理.提高开发效率.隔离应用.整合服务器.调试能力.多租户环境.快速部署.我们一直在谈Docker,Docker怎么使用,在怎么样的场合下使用?也许本文可以帮到你.有需要交流的地方,可以通过评论与我们交流. 几周前我们参加了DockerCon ,Dockercon是首个以Docker为中心的技术大会.它面向开发者以及对在Docker开放平台上构建.交付.运行分布式应用感兴趣的从业者,不论这些开放平台是运