Item 36 非虚拟的成员函数不能重定义

 

虚函数才是动态绑定,在运行时根据指针指向的对象的实际类型,决定调用的函数。
引用和指针是一样的,对于非虚拟函数,都是静态绑定。
一个“非虚拟”函数就意味着,某个类体系都要有这样一个共同的行为,所以在设计上重定义非虚拟函数也是错误的,会误导客户。
Item 7说过,多态的dtor也要虚拟,和本文是一样的道理,都是不希望函数被静态绑定。

回答: 类成员函数指针是指向类的静态成员函数的指针。在使用类成员函数指针时,需要使用类对象或者指针来调用指针所指的成员函数。这是因为静态的成员函数必须被绑定到一个类的对象或者指针上,才能得到被调用对象的this指针,然后才能调用指针所指的成员函数。在C语言中,直接使用类成员函数指针会报错,需要注意使用方法的区别。类成员函数指针是有真正的内存地址的,这个地址一般跟具体的类对象没有什么关系,因为类被需要的时候会被载入内存,类成员函数也会被载入内存。下面是一个示例代码,演示了类成员函数指针的使用方法: ```cpp #include <iostream> using namespace std; class CT { public: void func(int tmp) { cout << "func()普通函数, tmp = " << tmp << endl; } virtual void virtualfunc(int tmp) { cout << "virtualfunc()虚函数, tmp = " << tmp << endl; } static void staticfunc(int tmp) { cout << "staticfunc()静态成员函数, tmp = " << tmp << endl; } }; int main() { CT ct; CT* pct = &ct; void (CT::*func_pointer)(int); // 一个类成员函数指针变量的定义 func_pointer = &CT::func; (ct.*func_pointer)(100); // 使用类对象来调用类成员函数指针指向的成员函数 (pct->*func_pointer)(100); // 使用类指针来调用类成员函数指针指向的成员函数 return 0; } ``` 在上述示例代码中,定义了一个类CT,其中包含了一个普通成员函数func、一个虚函数virtualfunc和一个静态成员函数staticfunc。主函数中定义了一个类对象ct和一个类指针pct,并声明了一个类成员函数指针变量func_pointer,将其指向func函数。接着使用类对象和类指针来调用func指向的成员函数。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [C++类成员函数指针使用介绍](https://blog.csdn.net/luoyayun361/article/details/101109522)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [类成员函数指针](https://blog.csdn.net/A_With_better/article/details/123079792)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值