C++:派生类会见模板化基类(templatized base class)的定名
当前位置:以往代写 > C/C++ 教程 >C++:派生类会见模板化基类(templatized base class)的定名
2019-06-13

C++:派生类会见模板化基类(templatized base class)的定名

C++:派生类会见模板化基类(templatized base class)的定名

派生类担任模板化基类的成员函数, 默认是无法会见, 模板化基类的定名.

原因是模板的定制化有大概打消某些函数, 为了能在编译期检测堕落误, 所以默认无法会见.

派生类会见模板化基类, 包括三种要领:

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

作者:csdn博客 Spike_King

    关键字:

在线提交作业