程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++ - 派生類訪問模板化基類(templatized base class)的命名

C++ - 派生類訪問模板化基類(templatized base class)的命名

編輯:C++入門知識

  派生類繼承模板化基類的成員函數, 默認是無法訪問, 模板化基類的命名.  原因是模板的定制化有可能取消某些函數, 為了能在編譯期檢測出錯誤, 所以默認無法訪問.   派生類訪問模板化基類, 包含三種方法: 1. 調用基類函數時, 使用"this->", 指明調用的類, 是本類, 在編譯時, 可以進行檢查; 2. 使用using聲明式, 可以把基類的函數引入派生類, 在編譯時, 可以進行檢查; 3. 使用顯示修飾(explicit qualification), 不推薦, 顯示修飾會屏蔽virtual的動態綁定;   本例為: 派生類, 調用基類的函數, 重寫修改格式, 進行輸出;   代碼: [cpp]   /*   * 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;   }    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved