国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++實現不能被繼承的類實例分析

2020-01-26 15:23:19
字體:
來源:轉載
供稿:網友

本文實例展示了C++實現不能被繼承的類的方法,對于C++初學者而言有一定的學習借鑒價值。具體實現方法如下:

方法一:

#include <iostream>using namespace std;class A{public:  static A* getInstance();  static void deleteInstance(A* pA);private:  A() { cout << "construct A/n";}  ~A() { cout << "destruct A/n"; }};A* A::getInstance(){  return new A;}void A::deleteInstance(A* pA){  delete pA;  pA = nullptr;}int main(){  A* pA = A::getInstance();  A::deleteInstance(pA);  cin.get();}

該方法其實就是把構造函數、析構函數private了,這樣的話當想派生一個類時,派生類無法構造一個父類,所以就不行了。

方法二:

#include <iostream>using namespace std;template <typename T>class A{  friend T;private:  A(int data) : m_data(data) { cout << "construct A. data: " << m_data << endl; }  ~A() {}  int m_data;};class B : virtual public A<B>{public:  B(int data) : A(data) { cout << "construct B/n"; }  ~B() {}};int main(void){  B b(4);  cin.get();}

類B設置為類A的友元,這樣類B作為A的子類就可以構造一個父類了。這時候類B可以正常使用,但是不能從類B派生一個子類,因為B虛繼承A,如果想 class C : pulic B 的話,由于是虛繼承,那么在C類的構造函數就得直接調用A類的構造函數,但是B是A的友元,C不是,所以無法直接調用A的構造函數,編譯出錯。這里C類必須直接調用A的構造函數的

但是如果你把B類的聲明改為 class B : public A<B> 的話,那么又可以從B類派生一個子類C了,因為不用虛繼承的話,在C類的構造函數調用B類的構造函數,B類的構造函數再調用A類的(B是A的友元,即使A的構造函數是private也無妨)。這是一層層向上調用的。

相信通過本文實例可以幫助大家更好的理解C++中類的原理及使用。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 静安区| 永嘉县| 柘荣县| 崇阳县| 轮台县| 抚远县| 滨海县| 凤冈县| 青川县| 高要市| 金昌市| 邯郸市| 盘锦市| 新巴尔虎左旗| 洮南市| 佛坪县| 稻城县| 呈贡县| 遂昌县| 青川县| 凤山市| 高要市| 岢岚县| 建阳市| 黄大仙区| 乃东县| 孟州市| 花莲县| 新绛县| 西乌珠穆沁旗| 格尔木市| 姜堰市| 新民市| 张北县| 遂昌县| 腾冲县| 合作市| 朔州市| 阳新县| 易门县| 桐柏县|