C++ - 派生类访问模板化基类(templatized base class)的命名
来源:互联网 发布:星际战甲人物捏脸数据 编辑:程序博客网 时间:2024/05/22 03:42
派生类访问模板化基类(templatized base class)的命名
本文地址: http://blog.csdn.net/caroline_wendy/article/details/23993691
派生类继承模板化基类的成员函数, 默认是无法访问, 模板化基类的命名.
原因是模板的定制化有可能取消某些函数, 为了能在编译期检测出错误, 所以默认无法访问.
派生类访问模板化基类, 包含三种方法:
1. 调用基类函数时, 使用"this->", 指明调用的类, 是本类, 在编译时, 可以进行检查;
2. 使用using声明式, 可以把基类的函数引入派生类, 在编译时, 可以进行检查;
3. 使用显示修饰(explicit qualification), 不推荐, 显示修饰会屏蔽virtual的动态绑定;
本例为: 派生类, 调用基类的函数, 重写修改格式, 进行输出;
代码:
/* * test.cpp * * Created on: 2014.04.18 * Author: Spike *//*eclipse cdt, gcc 4.8.1*/#include <iostream>#include <string>#include <memory>using namespace std;class CompanyCaroline {public:void sendCleartext(const std::string& msg) {std::cout << "Cleartext: " << msg << std::endl;}void sendEncrypted(const std::string& msg) {std::cout << "Encrypted: " << msg << std::endl;}};struct MsgInfo {std::string cleartext;std::string encrypted;};template<typename Company>class MsgSender {public:void sendClear(const MsgInfo& info) {std::string msg = info.cleartext;Company c;c.sendCleartext(msg);}void sendSecret(const MsgInfo& info) {std::string msg = info.encrypted;Company c;c.sendEncrypted(msg);}};template<typename Company>class LoggingMsgSender : public MsgSender<Company> {public://using MsgSender<Company>::sendClear; //方法二void sendClearMsg(const MsgInfo& info) {std::cout << "Log Begin : ";//sendClear(info);this->sendClear(info); //方法一//MsgSender<Company>::sendClear(info); //方法三, 会关闭虚绑定的行为, 不建议}};int main() {MsgInfo mi = {"Clear", "Encrypted"};LoggingMsgSender<CompanyCaroline> lms;lms.sendClearMsg(mi);return 0;}
输出:
Log Begin : Cleartext: Clear
3 0
- C++ - 派生类访问模板化基类(templatized base class)的命名
- [翻译] Effective C++, 3rd Edition, Item 43: 了解如何访问 templatized base classes(模板化基类)中的名字(上)
- [翻译] Effective C++, 3rd Edition, Item 43: 了解如何访问 templatized base classes(模板化基类)中的名字(下)
- 基类(base class)和派生类(derived class)指针在C++的相互转化
- c++模板类派生:派生类访问基类中的public 和protected成员的一些问题
- C++__类模板的派生
- [c++]派生类的访问控制
- base保留字 从派生类中访问基类的成员
- C#控制台 使用base访问被派生类屏蔽的基类字段
- drivers\base\class.c
- 派生类的访问控制
- 派生类成员的访问
- 派生类成员的访问
- VS2005中派生模板类的BUG
- [c++]派生类的应用
- C++: 类的继承派生
- 派生类对基类的访问
- 派生类的继承权与访问域
- hibernate学习笔记(八)Session的delete方法
- 注册测绘师将与测绘资质单位挂钩
- CentOS升级Git
- unity OnTrigger和List使用
- MobilePhone GPU
- C++ - 派生类访问模板化基类(templatized base class)的命名
- SPRING+ACTIVEMQ+TOMCAT整合
- 程序运行时三种内存分配策略
- ASP.NET远程连接SQL Server“尝试读取或写入受保护的内存”
- 又一个IE的坑,时间字符串的转换
- hibenrnate学习笔记9对象关系映射文件
- 网页宽度自动适应手机屏幕宽度的方法
- iOS 7 交互式过渡
- 致命的错误:python中误输入tab键