c++const指针与函数调用

来源:互联网 发布:嗨推淘宝客论坛 编辑:程序博客网 时间:2024/06/16 01:26

  在我的博客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()。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 钱被同学偷了怎么办 上班穿皮鞋脚疼怎么办 高跟靴子买大了怎么办 我怀了第三个小孩怎么办? 离婚前把钱花了怎么办 对谈对象有压力怎么办 和对象感情淡了怎么办 孩子处对象学习下降怎么办 孩子高三成绩差怎么办 老妈怨气太重怎么办 广东小高考有d怎么办 高考考生档案袋有个小洞怎么办 江苏省考生出省后小高考成绩怎么办 江苏小高考三D怎么办 小高考补考没过怎么办 理科高考200多分怎么办 高考没考过200分怎么办 电子手表指针不走了怎么办 家长说你教的不好怎么办 小升初分班考试考砸了怎么办 老公不给老婆看病怎么办 孕妈妈涨奶严重怎么办 90岁老头尿不下尿怎么办 妻子要离婚丈夫不离怎么办 弟媳妇天天在家吵架怎么办 弟媳妇不和我说话怎么办 我想和弟媳妇做一次怎么办 老公对弟媳妇有非分之想怎么办 跟弟媳妇有矛盾怎么办 学生考试前不认真怎么办 有人雇凶要杀我怎么办 高考理综数学英语都没考好怎么办 母亲判刑孩子未成年无人监管怎么办 高三了数学30分怎么办 母猪发烧耳朵放血止不住了怎么办? 青春期孩子动手打父母该怎么办 20岁睡觉不老实怎么办 孕妇梦见钱掉了怎么办 小孩晚上睡觉鼻子塞怎么办 宝宝晚上睡觉鼻子塞怎么办 按摩后吹冷气发冷怎么办