在我的博客http://blog.csdn.net/caoyan_12727/article/details/52064958中,已经讨论了动态绑定和静态绑定,以及在缺省参数情况下虚函数的绑定情况。一般情况下,我们

是用非const的基类指针指向派生类对象,如果通过该指针调用虚函数则发生的动态绑定,如果我们定义一个const指针,指向派生类的对象,如果派生类里定义了同名的虚函数和

const函数,会发生什么调用???

测试1:

#include<iostream>
#include<vector>
#include<map>
#include<sstream>
using namespace std;class A{
public:virtual void f(){cout << "A::f()" << endl;}void f() const{cout << "A::f() const" << endl;}
};
class B : public A{
public:void f(){cout << "B::f()" << endl;}void f() const{cout << "B::f() const" << endl;}
};void g(const A* a){a->f();
}
int main(){B bb;A aa;A const*ptr = &aa;ptr->f();A *ptr1 = &aa;ptr1->f();//派生类B const*ptr2 = &bb;ptr2->f();B *ptr3 = &bb;ptr3->f();A* a = new B();a->f();A const*a1 = new B();a1->f();g(a);delete a;return 0;
}

结果:

测试2:

将类A进行修改:

class A{
public:virtual void f(){cout << "A::f()" << endl;}virtual void f() const{cout << "A::f() const" << endl;}
};

结果:

可以看出:

(1)const指针智能调用类的const函数,如果用const指针调用非const函数将会报错,非const指针调用const函数编译器不会报错。

(2)const与虚函数并存的时候,const指针只能调用const函数,测试1中,由于const f()不是虚的,所以对const调用时静态绑定,调用的是基类的const函数。在测试2中将

const f()设置为虚函数时,由于派生类重写const f(),所以调用派生类的const f()。

转自: https://blog.csdn.net/caoyan_12727/article/details/52493555

c++ const指针与函数调用相关推荐

  1. c++const指针与函数调用

    在我的博客http://blog.csdn.net/caoyan_12727/article/details/52064958中,已经讨论了动态绑定和静态绑定,以及在缺省参数情况下虚函数的绑定情况.一 ...

  2. C++ Const指针学习

    Const指针 const指针顾名思义就是常量指针的意思.下面将通过一些具体例子说明const指针的几种用法. const type *p 特性 防止使用p指针来修改p所指向的值,下面是最简单的错误例 ...

  3. c++中的void指针和const指针

    在c++中可以声明指向void类型的指针,指向void类型的指针称为void指针,此外,在声明指针时,还可以用关键字const进行修饰,用关键字const修饰的指针称为const指针. 1.void指 ...

  4. const指针 常指针

    (2)常指针 必须进行初始化,且const指针的值不能修改. #include<iostream> using namespace std; int main(){const int nu ...

  5. boost::core模块实现分配const指针

    boost::core模块实现分配const指针 实现功能 C++实现代码 实现功能 boost::core模块实现分配const指针 C++实现代码 #include <boost/core/ ...

  6. 辨析 const指针 和 指向常量的指针

    辨析以下几种指针p的定义. int tmp = 5;int *p = &tmp; const int *p = &tmp; int const* p = &tmp; int * ...

  7. const指针和指向常量的指针

    先看下面六种写法: 1. const int p;2. const int *p;3. int const* p;4. int * const p;5. const int * const p;6. ...

  8. const指针和指向const对象的指针

    1.指向const对象的指针 C++强制要求指向const对象的指针也必须具有const特性. const double *ptr; 限定了ptr指针指向double类型const对象的, 即cons ...

  9. C++之指针探究(十九):typedef和const指针

    typedef和const指针   typedef int* pointer; const pointer p1; 相当于是int* const p1;   typedef int* pointer; ...

最新文章

  1. javascript高精度计算解决方案
  2. 无线鼠标接收器对码软件_接收器太小容易丢 这几招记好就不怕
  3. SQL 备份与恢复之还原数据库
  4. 8月语言排行:C#继续呈现增长态势
  5. PL/SQL Developer的错误提示弹框的文本显示乱码问题
  6. 原型设计(顶会热词统计)
  7. java如何调用同目录下的文件_文件目录发生了增删改操作?Java如何实时监控?...
  8. CentOS搭建全功能服务器(Nginx+Tomcat+PHP+SSL)
  9. C/C++调用java---JNI常用函数
  10. python3的配置文件类单例实现_单例模式的几种实现方式及对比
  11. 数据--第48课 - 顺序表和有序表查找
  12. 667.优美的数列II(力扣leetcode) 博主可答疑该问题
  13. 智慧水务技能——SWMM、最优化与预测理论及三维动态可视化
  14. 第一天计算机谁发明的,世界公认三大天才,尼古拉特斯拉是当之无愧的第一天才...
  15. Paper intensive reading (二十五):Fecal Viral ...Virion-Enriched Metagenomics and Metatranscriptomics
  16. Nginx reopen reload作用及工作过程
  17. JS学习笔记之内置对象 4.21
  18. 使用两个无线路由器实现桥接中继
  19. PX4模块设计之三十五:MulticopterAttitudeControl模块
  20. Python爬虫突然提取不出信息了,返回的是空列表的解决办法

热门文章

  1. 抖音如何起号、养号、增粉、搜索排名怎么优化
  2. 【LeetCode】﹝二分法ி﹞旋转排序数组的最小值、给定值查询
  3. 肖申克的救赎--剧本
  4. CSS小技巧之两行文字两端对齐
  5. Verilator 仿真环境搭建和查看波形图
  6. vue项目使用IE浏览器运行报错
  7. css:实现多行文本居中的五种方法
  8. 【bzoj3823】【定情信物】【递推】
  9. js中表格隔行变色、隔列变色
  10. java do对象_java一些对象概念扫盲帖(DO VO DTO PO)