程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++中多層繼承(inheritance) 的使用及示例

C++中多層繼承(inheritance) 的使用及示例

編輯:關於C++

動態綁定只能應用在虛函數(virtual function), 通過指針(->)或引用(.)調用; 聲明基類指針, 綁定派生類對象;

可以使用"shared_ptr<Abstract_Base_Class> p(new Derived_Class(para));"的形式, 動態綁定派生的類;

可以為動態基類添加一個接口(interface), 使用友元函數, 訪問基類的私有成員變量; 並把具體操作寫入接口中;

如果一個派生類, 沒有實現抽象基類的純虛函數, 則會繼承此函數, 那麼這個派生類也是抽象基類;

抽象基類不能創建具體的對象, 但是可以實現具體的方法, 為派生類提供繼承;

面向對象編程: 抽象(abstraction), 即數據抽象(data abstraction);繼承(inheritance);多態(polynorphism), 即動態綁定(dynamic binding).

具體代碼如下, 詳見注釋:

/* 
 * cppprimer.cpp 
 * 
 *  Created on: 2013.11.7 
 *      Author: Caroline 
 */
      
/*eclipse cdt, gcc 4.8.1*/
      
#include <iostream>  
#include <fstream>  
#include <sstream>  
#include <string>  
#include <vector>  
#include <memory>  
#include <algorithm>  
#include <iterator>  
      
#include <set>  
#include <map>  
      
using namespace std;  
      
class QueryResult;  
std::ostream& print(std::ostream& os, const QueryResult &qr);  
      
class TextQuery {  
public:  
    using line_no = std::vector<std::string>::size_type;  
    TextQuery(std::ifstream& );  
    QueryResult query(const std::string& ) const;  
private:  
    std::shared_ptr<std::vector<std::string> > file; //文件內容  
    std::map<std::string, std::shared_ptr<std::set<line_no> > > wm; //詞和行號的集合  
};  
      
/*把每一行放入text, 存入file(vector), 組成word和行號(set)的映射*/
TextQuery::TextQuery(std::ifstream &is) : file(new std::vector<std::string>)  
{  
    std::string text;  
    while (std::getline(is, text)) {  
        file->push_back(text);  
        int n = file->size() - 1;  
        std::istringstream line(text);  
        std::string word;  
        while (line >> word) {  
            auto& lines = wm[word];  
            if (!lines)  
                lines.reset(new set<line_no>);  
            lines->insert(n);  
        }  
    }  
}  
      
class QueryResult {  
friend std::ostream& print (std::ostream&, const QueryResult& );  
public:  
    using line_no = std::vector<std::string>::size_type;  
    QueryResult (std::string s, //查詢單詞  
            std::shared_ptr<std::set<line_no>> p, //匹配行號  
            std::shared_ptr<std::vector<std::string>> f) : //輸入文件  
                sought(s), lines(p), file(f) {}  
    std::set<line_no>::iterator begin() { return lines->begin(); }  
    std::set<line_no>::iterator end() { return lines->end(); }  
    std::shared_ptr<std::vector<std::string>> get_file() { return file; }  
private:  
    std::string sought; //查找字符串  
    std::shared_ptr<std::set<line_no>> lines; //行號集合  
    std::shared_ptr<std::vector<std::string>> file; //文件集合  
};  
      
/*找到指定sought的集合, 返回迭代器, 傳入string和set*/
/*
		
							
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved