C++模板類與繼承

1)模板類繼承普通類(常見)。
2)普通類繼承模板類的實例化版本。
3)普通類繼承模板類。(常見)
4)模板類繼承模板類。
5)模板類繼承模板參數給出的基類(不能是模板類)。
示例:
1)模板類繼承普通類

#include <iostream>         // 包含頭文件。
using namespace std;        // 指定缺省的命名空間。class AA     // 普通類AA。
{
public:int m_a;AA(int a) :m_a(a) { cout << "調用了AA的構造函數。\n"; }void func1() { cout << "調用了func1()函數:m_a=" << m_a << endl;; }
};template<class T1, class T2>
class BB:public AA      // 模板類BB。
{
public:T1 m_x;T2 m_y;BB(const T1 x, const T2 y,int a) : AA(a) , m_x(x), m_y(y) { cout << "調用了BB的構造函數。\n"; }void func2() const { cout << "調用了func2()函數:x = " << m_x << ", y = " << m_y << endl; }
};int main()
{BB<int, string> bb(8, "我是一只傻傻鳥。",3);bb.func2();bb.func1();
}

2)普通類繼承模板類的實例化版本

#include <iostream>         // 包含頭文件。
using namespace std;        // 指定缺省的命名空間。template<class T1, class T2>
class BB      // 模板類BB。
{
public:T1 m_x;T2 m_y;BB(const T1 x, const T2 y) : m_x(x), m_y(y) { cout << "調用了BB的構造函數。\n"; }void func2() const { cout << "調用了func2()函數:x = " << m_x << ", y = " << m_y << endl; }
};class AA:public BB<int,string>     // 普通類AA。
{
public:int m_a;AA(int a,int x,string y) : BB(x,y),m_a(a) { cout << "調用了AA的構造函數。\n"; }void func1() { cout << "調用了func1()函數:m_a=" << m_a << endl;; }
};int main()
{AA aa(3,8, "我是一只傻傻鳥。");aa.func1();aa.func2();
}

3)普通類繼承模板類。

#include <iostream>         // 包含頭文件。
using namespace std;        // 指定缺省的命名空間。template<class T1, class T2>
class BB      // 模板類BB。
{
public:T1 m_x;T2 m_y;BB(const T1 x, const T2 y) : m_x(x), m_y(y) { cout << "調用了BB的構造函數。\n"; }void func2() const { cout << "調用了func2()函數:x = " << m_x << ", y = " << m_y << endl; }
};template<class T1, class T2>
class AA:public BB<T1,T2>     // 普通類AA變成了模板類,才能繼承模板類。
{
public:int m_a;AA(int a, const T1 x, const T2 y) : BB<T1,T2>(x,y),m_a(a) { cout << "調用了AA的構造函數。\n"; }void func1() { cout << "調用了func1()函數:m_a=" << m_a << endl;; }
};int main()
{AA<int,string> aa(3,8, "我是一只傻傻鳥。");aa.func1();aa.func2();
}

4)模板類繼承模板類。

#include <iostream>         // 包含頭文件。
using namespace std;        // 指定缺省的命名空間。template<class T1, class T2>
class BB      // 模板類BB。
{
public:T1 m_x;T2 m_y;BB(const T1 x, const T2 y) : m_x(x), m_y(y) { cout << "調用了BB的構造函數。\n"; }void func2() const { cout << "調用了func2()函數:x = " << m_x << ", y = " << m_y << endl; }
};template<class T1, class T2>
class AA:public BB<T1,T2>     // 普通類AA變成了模板類,才能繼承模板類。
{
public:int m_a;AA(int a, const T1 x, const T2 y) : BB<T1,T2>(x,y),m_a(a) { cout << "調用了AA的構造函數。\n"; }void func1() { cout << "調用了func1()函數:m_a=" << m_a << endl;; }
};template<class T, class T1, class T2>
class CC :public BB<T1, T2>   // 模板類繼承模板類。
{
public:T m_a;CC(const T a, const T1 x, const T2 y) : BB<T1, T2>(x, y), m_a(a) { cout << "調用了CC的構造函數。\n"; }void func3() { cout << "調用了func3()函數:m_a=" << m_a << endl;; }
};int main()
{CC<int,int,string> cc(3,8, "我是一只傻傻鳥。");cc.func3();cc.func2();
}

5)模板類繼承模板參數給出的基類\

#include <iostream>         // 包含頭文件。
using namespace std;        // 指定缺省的命名空間。class AA {
public:AA()         { cout << "調用了AA的構造函數AA()。\n"; }AA(int a) { cout << "調用了AA的構造函數AA(int a)。\n"; }
};class BB {
public:BB()         { cout << "調用了BB的構造函數BB()。\n"; }BB(int a) { cout << "調用了BB的構造函數BB(int a)。\n"; }
};class CC {
public:CC()         { cout << "調用了CC的構造函數CC()。\n"; }CC(int a) { cout << "調用了CC的構造函數CC(int a)。\n"; }
};template<class T>
class DD {
public:DD()         { cout << "調用了DD的構造函數DD()。\n"; }DD(int a) { cout << "調用了DD的構造函數DD(int a)。\n"; }
};template<class T>
class EE : public T {          // 模板類繼承模板參數給出的基類。
public:EE() :T()           { cout << "調用了EE的構造函數EE()。\n"; }EE(int a) :T(a) { cout << "調用了EE的構造函數EE(int a)。\n"; }
};int main()
{EE<AA> ea1;                 // AA作為基類。EE<BB> eb1;                 // BB作為基類。EE<CC> ec1;                 // CC作為基類。EE<DD<int>> ed1;      // EE<int>作為基類。// EE<DD> ed1;                // DD作為基類,錯誤。
}

推薦一個零聲學院項目課,個人覺得老師講得不錯,分享給大家:
零聲白金學習卡(含基礎架構/高性能存儲/golang云原生/音視頻/Linux內核)
https://xxetb.xet.tech/s/3Zqhgt

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/37206.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/37206.shtml
英文地址,請注明出處:http://en.pswp.cn/web/37206.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【抽代復習筆記】24-群(十八):循環群的兩道例題

例1&#xff1a;證明&#xff1a; &#xff08;1&#xff09;三次交錯群A3是循環群&#xff0c;它與(Z3,)同構&#xff0c;其中Z3 {[0],[1],[2]}&#xff1b; &#xff08;2&#xff09;G {1,i,-1,-i}&#xff0c;G上的代數運算是數的乘法&#xff0c;則G是一個循環群&…

如何解決三菱軟件提示 起動MELSOFT Mediative Server失敗

前言&#xff1a; 注意&#xff0c;這篇文章僅針對如何解決 起動MELSOFT Mediative Server失敗 的問題。對于其他相關的問題&#xff0c;請搜索其他相應的解決辦法。 本人是在重裝三菱GX Works軟件時遇到此問題的。后來搜索發現無人能妥善的關閉這個提示。因此本文介紹如何關…

【Web3項目案例】Ethers.js極簡入門+實戰案例:實現ERC20協議代幣查詢、交易

蘇澤 大家好 這里是蘇澤 一個鐘愛區塊鏈技術的后端開發者 本篇專欄 ←持續記錄本人自學智能合約學習筆記和經驗總結 如果喜歡拜托三連支持~ 目錄 簡介 前景科普-ERC20 Ethers極簡入門教程&#xff1a;HelloVitalik&#xff08;非小白可跳&#xff09; 教程概覽 開發工具 V…

魔行觀察-烤匠麻辣烤魚-開關店監測-時間段:2011年1月 至 2024年6月

今日監測對象&#xff1a;烤匠麻辣烤魚&#xff0c;監測時間段&#xff1a;2011年1月 至 2024年6月 本文用到數據源獲取地址 魔行觀察http://www.wmomo.com/ 品牌介紹&#xff1a; 2013年&#xff0c;第一家烤匠在成都藍色加勒比廣場開業&#xff0c;隨后幾年成都國金中心店…

超詳細的tomcat安裝以及簡略項目的部署

一、安裝包 安裝路徑&#xff1a; 鏈接&#xff1a;https://pan.baidu.com/s/1JzPQQ2zUdnXi_FaTTG0pvg?pwdriht 提取碼&#xff1a;riht 安裝完之后我們打開&#xff0c;可看見以下目錄結構 二、環境變量配置 首先打開我們電腦的高級環境變量配置 我們先配置一個系統變量…

Variables Reference for vscode

Predefined variables Visual Studio Code 支持在調試、任務配置文件以及一些特定的設置中使用變量替換。這些變量可以使用 ${variableName} 語法在 launch.json 和 tasks.json 文件的某些鍵和值字符串中使用。 Predefined variables Visual Studio Code 支持以下預定義變量…

Zookeeper:Zookeeper JavaAPI操作與分布式鎖

文章目錄 一、Zookeeper JavaAPI操作1、Curator介紹2、創建、查詢、修改、刪除節點3、Watch事件監聽 二、Zookeeper分布式鎖原理 一、Zookeeper JavaAPI操作 1、Curator介紹 Curator是Apache Zookeeper的Java客戶端。常見的Zookeeper Java API&#xff1a; 原生Java API。ZkC…

天氣網站爬蟲及可視化

摘要&#xff1a;隨著互聯網的快速發展&#xff0c;人們對天氣信息的需求也越來越高。本論文基于Python語言&#xff0c;設計并實現了一個天氣網站爬蟲及可視化系統。該系統通過網絡爬蟲技術從多個天氣網站上獲取實時的天氣數據&#xff0c;并將數據進行清洗和存儲。同時&#…

數據倉庫面試題(二)

1. 簡述星型模型和雪花模型的區別&#xff1f;應用場景 &#xff1f; 星型模型&#xff08;Star Schema&#xff09;和雪花模型&#xff08;Snowflake Schema&#xff09;是數據倉庫中常用的兩種維度建模方法&#xff0c;它們在數據組織和設計上有所不同。 星型模型&#xff…

【簡易版tinySTL】 哈希表與移動語義

基本概念 哈希表&#xff08;HashTable&#xff09;是一個重要的底層數據結構, 無序關聯容器包括unordered_set, unordered_map內部都是基于哈希表實現。 哈希表是一種通過哈希函數將鍵映射到索引的數據結構&#xff0c;存儲在內存空間中。哈希函數負責將任意大小的輸入映射到…

【C++】內存分區

目錄 內存分區代碼運行前后區別各分區詳細解釋C內存申請和釋放 內存分區 不同的操作系統對程序內存的管理和劃分會有所不同。 此處是C內存區域劃分主要是針對通用的情況&#xff0c;并不限定在某個特定操作系統上 一般分為4個區&#xff08;有時把全局區拆分成數據區未初始化…

git 命令學習之branch 和 tag 操作

引言 在項目一個迭代過程結束之時&#xff0c;或是一個版本發布之后&#xff0c;我們要進行 新版本的開發&#xff0c;這時就需要對原來的項目代碼進行封存&#xff0c;以及新項目代碼的開始&#xff0c;這時就需要用到 branch 和 tag 操作。下面簡單說說對這兩個操作的理解。…

微服務之服務保護策略【持續更新】

文章目錄 線程隔離一、滑動窗口算法二、漏桶算法三、令牌桶算法 面試題1、Sentinel 限流和Gateway限流的區別 線程隔離 兩種實現方式 線程池隔離&#xff08;Hystix隔離&#xff09;&#xff0c;每個被隔離的業務都要創建一個獨立的線程池&#xff0c;線程過多會帶來額外的CPU…

【C語言】C語言-體育彩票的模擬生成和兌獎(源碼+論文)【獨一無二】

&#x1f449;博__主&#x1f448;&#xff1a;米碼收割機 &#x1f449;技__能&#x1f448;&#xff1a;C/Python語言 &#x1f449;公眾號&#x1f448;&#xff1a;測試開發自動化【獲取源碼商業合作】 &#x1f449;榮__譽&#x1f448;&#xff1a;阿里云博客專家博主、5…

【涵子來信科技潮流】——WWDC24回顧與暑假更新說明

期末大關&#xff0c;即將來襲。在期末之前&#xff0c;我想發一篇文章&#xff0c;介紹有關WWDC24的內容和暑假中更新的說明。本篇文章僅為個人看法和分享&#xff0c;如需了解更多詳細內容&#xff0c;請通過官方渠道或者巨佬文章進行進一步了解。 OK, Lets go. 一、WWDC24 …

Linux grep技巧 刪除含有指定關鍵詞的行,創建新文件

一. 需求 ?有如下文件&#xff0c;現要求 刪除含有xuecheng關鍵字的行刪除含有192.168.1.1關鍵字的行也就是說&#xff0c;最終只會留下127.0.0.1 license.sublimehq.com 127.0.0.1 www.xuecheng.com 127.0.0.1 img.xuecheng.com 192.168.1.1 www.test.com 127.0.0.1 video…

力扣每日一題 6/30 記憶化搜索/動態規劃

博客主頁&#xff1a;誓則盟約系列專欄&#xff1a;IT競賽 專欄關注博主&#xff0c;后期持續更新系列文章如果有錯誤感謝請大家批評指出&#xff0c;及時修改感謝大家點贊&#x1f44d;收藏?評論? 494.目標和【中等】 題目&#xff1a; 給你一個非負整數數組 nums 和一個…

VMware17.0 安裝過程

VMware17.0 VMware 17.0 是一款功能強大的虛擬機軟件&#xff0c;用于在計算機上創建和管理虛擬機。它能夠同時運行多個操作系統&#xff0c;如 Windows、Linux 等&#xff0c;并且在這些虛擬機之間提供無縫的切換和共享功能。 VMware 17.0 支持最新的硬件和操作系統&#xf…

Chrome瀏覽器web調試(js調試、css調試、篡改前置)

目錄 1. 打開開發者工具(Dev Tool) 2. 打開命令菜單 截圖 3. 面板介紹 4. CSS調試 右鍵檢查快速到達元素處 查找DOM數 利用面板Console查找DOM節點 內置函數查找上一個選擇點擊的元素 5. 調試JS代碼(Javascript調試) 日志調試 選擇查看日志等級 眼睛觀測變量 …

【Leetcode 67 Easy】二進制求和

目錄 題目描述&#xff1a; 整體思路&#xff1a; 具體代碼&#xff1a; 題目描述&#xff1a; 原題地址 給你兩個二進制字符串 a 和 b &#xff0c;以二進制字符串的形式返回它們的和。 示例 1&#xff1a; 輸入:a "11", b "1" 輸出&#xff1a;&qu…