引用及虚函数

C++中为什么要用虚函数、指针或引用才能实现多态? /************************************ *多态的经典例子 *2013-11-02 ************************************/ #include using namespace std; //基类 class Fruit { public: virtual void print() {cout<<"Fruit"< 阅读详情

通过基类的指针可以实现动态绑定,同样,通过基类的引用,也可以实现动态绑定。

#include "iostream"
#include "stdlib.h"
using namespace std;
class emptyA
{
   public:
   emptyA(int a){v=a;}
   void fun(){cout<<"emptyA\n";}
   virtual void vfun(){cout<<"base"<< v<<endl;}
   int v;
};

class emptyB:public emptyA
{
   public:
   emptyB(int a):emptyA(a){}
   virtual int fun1(){}
   void fun2(){  emptyA::fun();}
   void vfun(){ cout<< "inherit :"<< v<< endl;}
};


int main(int argc , char** argv)
{
   emptyA a(1);
   emptyB b(2);
   emptyA *p = &a;
   p->vfun();        // 通过基类指针调用虚函数
   p = &b;
   p->vfun();
   
   emptyA &r=b;      // 通过引用调用虚函数
   r.vfun();
   
   r=a;              // 引用的关系没有变化,将a对象赋值为r,及将a赋值为b
   r.vfun();         // output: inherit :1
 
   return 0;
}


使用指针和引用处理虚函数实例 《Visual C++2012入门经典(第6版)》实例,使用指向基类对象的指针调用虚函数,使用引用处理虚函数 立即下载

相关推荐

手把手调试Android 10 DHCP服务:从dumpsys network_stack到DhcpServer.java的实战技巧

本文详细介绍了在Android 10中调试DHCP服务的实战技巧,从使用dumpsys network_stack分析服务状态到深入DhcpServer.java源码追踪问题。文章提供了完整的工具链配置、关键调试命令和常见问题解决方案,帮助开发者高效解决DHCP服务未启动、IP分配失败等典型问题,特别适合需要深入理解Android网络架构的开发者参考。

uu89012的博客 743

C++利用对象、引用、指针调用虚函数

C++利用对象、引用、指针调用虚函数 虚函数实现原理说明: 每个类的大小比起所有成员数据多4个字节,表明有虚函数的类的大小还要加上一个紧缩的空指针类型的大小。这说明了该在包含虚函数的类中,编译系统自动加入了一些表明类型的信息。 当一个类中拥有虚函数时,编译系统将为该类创建一个数组VTABLE。VTABLE的元素是虚函数的地址,且同一虚函数的地址在基类和派生类的VTABLE中相对首位置的偏移是一样的...

low5252的博客 5920

从Gotham到Foundry:拆解Palantir三大产品线,看它如何用‘本体’统一企业数据与AI

本文深入解析Palantir的三大产品线Gotham、Foundry和Apollo,揭示其如何通过独特的'本体'架构实现企业数据与AI的无缝融合。从国防情报到商业决策,Palantir的产品架构展现了强大的数据整合与AI赋能能力,为企业构建数字孪生提供革命性解决方案。

weixin_30823001的博客 321

虚函数的三种调用方式——对象名、指针和引用

直接看示例代码 #include <iostream> using namespace std; class Father { public: Father(){}; virtual void func() { cout<<"Father"<<endl; } void func2() { cout<<"Father_func2"&...

SunnyZhang在奋斗的博客 9631

STM32+4G模块+MQTT协议:从零构建稳定可靠的物联网通讯链路

本文详细介绍了如何利用STM32、4G模块和MQTT协议构建稳定可靠的物联网通讯链路。通过硬件选型、AT指令配置和MQTT连接实战,帮助开发者实现低功耗、高可靠性的数据传输,特别适合户外和移动场景应用。

weixin_29191081的博客 334

Unity游戏开发:从零开始适配Nintendo Switch的完整指南

本文详细介绍了如何使用Unity进行Nintendo Switch游戏开发的完整流程,包括开发环境搭建、Unity工程适配、手柄与硬件特性开发、存储与性能优化等关键步骤。特别强调了Switch SDK的配置、输入系统改造和内存优化技巧,帮助开发者高效完成跨平台适配。

vodka的博客 1069

了解虚函数(引用)

了解虚函数(引用)虚函数的定义  :虚函数必须是基类的非静态成员函数,其访问权限可以是protected或public,在基类的类定义中定义虚函数的一般形式:  virtual 函数返回值类型 虚函数名(形参表)  { 函数体 }  虚函数的作用是实现动态联编,也就是在程序的运行阶段动态地选择合适的成员函数,在定义了虚函数后,可以在基类的派生类中对虚函数重新定义,在派生类中

lishuiwang的专栏 954

工程师必读一次性讲明白系列(十三)眼图、阻抗匹配、信号一致性、射频匹配、电磁感应

概念主要作用影响因素解决方法眼图评估信号质量,显示失真和噪声噪声、信号失真、时序抖动改善信号源、使用低噪声组件阻抗匹配避免信号反射,提高传输效率阻抗不匹配、传输线路特性使用匹配电路、适配器信号一致性保证信号稳定准确传输传输线路、噪声干扰使用屏蔽、滤波器,选择合适线路射频匹配确保射频信号高效传输天线设计、阻抗不匹配使用射频匹配器、调整天线设计电磁感应防止电磁干扰对信号的影响设备之间的电磁干扰(EMI)屏蔽、接地、滤波器。

weixin_43199439的博客 159

C++运行时通过基类指针或引用调用派生类虛函数的实现原理: 虛函数表

我们知道要实现运行时的多态, 必须在基类中声明和定义相关的虛函数, 并在派生类中重新实现基类中的虛函数. 当编译器见到这种继承层次结构的时候, 编译器将为定义了虛函数的基类和覆盖了基类虛函数的派生类分别创建一张虛函数表(Virtual Function Table, VFT), 也就是说通过编译器的编译, 基类和派生类的代码中都将有自己的虛函数表. 为这些类创建实例化对象时, 会在实例化的...

小强的机器人工坊 5217

儿童启蒙教育APP

pinyinList.add(createPinyin("a", "啊,像阿姨的阿", R.raw.pinyin_a));pinyinList.add(createPinyin("i", "衣,像衣服的衣", R.raw.pinyin_i));pinyinList.add(createPinyin("u", "乌,像乌鸦的乌", R.raw.pinyin_u));pinyinList.add(createPinyin("ü", "鱼,像小鱼的鱼", R.raw.pinyin_v));-- 固定竖屏 -->

寒寒豆豆软件公司的博客 167

virtuoso:layout如何做flat修drc

有些drc在virtuoso layout中修更节省时间,比如遇到一些via array需要做删改时,发现工具把via array做成了一个cell,如图。去改cell可能会影响很多via,所以最好的办法是做flat,去调整cut,比如删除。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 342

C++ 虚调用及其调用的具体形式

1.虚调用的定义虚调用是相对于实调用而言,它的本质是动态联编。在发生函数调用的时候,如果函数的入口地址是在编译阶段静态确定的,就是是实调用。反之,如果函数的入口地址要在运行时通过查询虚函数表的方式获得,就是虚调用。2.虚函数的几种实调用的情形2.1不通过指着或者引用调用虚函数虚调用不能简单的理解成“对虚函数的调用”,因为对虚函数的调用很有可能是是调用。考察如下程序。#include &amp;lt;iostrea

Doublelv 的博客专栏。 4418

Calibre:LVS 快速debug short/open技巧

用Fix Suggestion和Short Isolate两种方法debug LVS问题

m0_61544122的博客 7460

c++面试题 指针和引用 && 虚函数纯虚函数

《c++ primer》P47 1.指针本身就是一个对象,询语对指针赋值和拷贝,在指针的生命周期内它可以先后指向不同的对象 2.指针无需再定义时赋初值,如果没有初始化,是一个不确定的值

中转站 440

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

引用和指针调用虚函数实现多态

以Animal为父类,Cat为子类为例,动物类会叫,猫类会喵喵叫。未加关键字virtual之前,Animal类内部非静态成员函数,类为空,加入virtual后,Animal内部产生vfptr即虚拟函数指针,该指针大小为8字节,指向虚拟函数表vftable。文章使用引用或者指针实现调用虚函数实现多态。

mmomentx的博客 341

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

C++学习笔记(13)——利用对象、引用、指针调用虚函数

本博客(http://blog.youkuaiyun.com/livelylittlefish)贴出作者(三二一、小鱼)相关研究、学习内容所做的笔记,欢迎广大朋友指正!                                  利用对象、引用、指针调用虚函数                                        虚函数实现原理说明:         

学习,思考,记录,分享。 9543

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

C++中,虚函数,引用指针,拷贝复制等知识点总结

1、父类指针,引用子类对象是,指针调用的成员,如果是非虚函数,则调用的是父类的成员函数(即使在子类中有同名函数),普通成员函数;如果是虚函数,则调用子类中函数,在虚函数表中被子类覆盖了;父类指针只能调用父类中存在的成员,如果调用只在子类中存在的成员会失败(尽管指向的对象是子类对象); 2、虚函数在默认实参时,参数值是在编译时确定的。如果通过父类指针调用虚函数,虚函数参数为父类版本,调用的函数实体

xinsuixiaofeiyu的专栏 1270

C++引用指针虚函数

以前没有怎么注意C++继承时候基类引用子类或基类指针指向子类。现在写个小程序来测试下这种结果。 // TestCPP.cpp : Defines the entry point for the console application. #include"stdafx.h" #include"iostream" using namespace std; class B { pu

L695863436的专栏 981

引用、指针、多态、虚函数、重载

引用、指针、多态、虚函数、重载 1、引用的说明 引用指的是对一个对象的引用。引用和用来初始化引用的变量指向的是同一块内存,因此通过引用或者变量可以改变同一块内存中的内容。引用一旦初始化,它就代表了一块特定的内存,再也不能代表其他的内存。 n是m的一个引用(reference),m是被引用物(referent)。int m;int &am...

weixin_30517001的博客 109

析构函数和虚函数的用法和作用指针与引用的区别

置“~”是析构函数,因使用"~"符号(逻辑非运算符),表示它为腻构造函数,加上类名称来定义 ; 析构函数也是特殊的类成员函数,它没有返回类型,没有参数,不能随意调用,也没有重载,只有在类对象的生命期结束的时候,由系统自动调用。  虚函数是C++多态的一种表现 ; 例如:子类继承了父类的一个函数(方法),而我们把父类的指针指向子类,则必须把父类的该函数(方法)设为virturl(虚函数)。  使用虚

STICK TO IT 2529

3-9 final、虚函数、智能指针、匿名函数、右值引用,左值引用和指针。

每个对象在内存中会包含一个指向虚函数表的指针(vptr)。当通过基类指针或引用调用虚函数时,程序通过vptr找到虚函数表,再根据函数在表中的偏移量调用对应的函数。

mangolinlin的博客 1032

写写本人关于c/c++的引用,指针,虚函数的理解

1.指针: c是一门经典的语言,在下开始学习c,最难的部分,就是指针了。指针即为指向某个元素或者实体的地址,但是指针的内涵,不仅仅限于地址。 不知道有没有人注意到,指针还有一个指向的涵义。如 int* fun(void *a) { int *b=(int*)a; printf("%d\n",*b); return b; } 本身传进来的a指针是指

zhl11a的专栏 837

C++学习笔记---利用对象、引用、指针调用虚函数

虚函数总结:               虚函数只能是类成员函数,它在基类体内部说明,目的是提供一种接口界面;          虚函数不能是友元函数(即非成员函数),也不能是静态成员函数,因为虚函数调用要靠特定的对象来决定该激活哪个函数。虚函数可以在另一个类中被声明为友元函数;    一旦一个函数定义为虚函数,那么无论它传下多少层,都将保持为虚函数,而不必每

Weiguang_123的专栏 2209

c++,父类引用指向子类对象,虚函数

c++有父类引用指向子类对象(面向对象的重要特点之一,java里是这样的!) #include class Father { public: Father() { f = 1; } void print() { cout<<"f = "<<f<<endl; } public: int f; }; #include #include "Father.cpp" cl

2039

通过基类的指针或引用调用虚函数构成多态

面向对象三大特征:封装 继承 多态 在C++多态的实现是利用虚函数完成的,派生类对基类的虚函数重写,通过基类的指针或引用调用虚函数来实现多态的特性。本问重点讨论为什么必须是通过基类的指针或引用调用虚函数才能构成多态?我们将按照如下顺序逐步分析: 1.什么是虚函数? 在继承关系中,对基类的成员函数使用virtual关键字修饰后,该成员函数称为虚函数。继承该基类的派生类可以通过对虚函数重写实现多态。当然,派生类对基类的虚函数重写不是必须的。 2.动态绑定和静态绑定 动态绑定:在程序运行时才能确定

qq_47406941的博客 2724
上一篇: shell 变量
下一篇: 变量替换与扩展
LoveDisc
博客等级 码龄16年 0粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值