日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++创建 可以实例化但不能继承的类

發(fā)布時間:2025/4/14 c/c++ 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++创建 可以实例化但不能继承的类 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

class vb{

private:???
?? vb(){}?
friend C;???
} ??


//vb這個是一個基類,它的構(gòu)造函數(shù)是private,因此它根本就無法被創(chuàng)建。但是我們顯式增加了一個friend C。因此只有C才能創(chuàng)建vb。這是關(guān)鍵點。???
class C:virtual public vb{???
};
//C虛擬繼承自vb,這樣在構(gòu)造C的時侯,需要調(diào)用vb的默認構(gòu)造函數(shù),雖然vb的構(gòu)造函數(shù)是private的,但是由于C是vb的friend,因此我們可以自由的在棧上,堆上建立C的實例。例如:?
C c;
C *pc = new C;?
都沒有問題。?
但是下面我們會看到,C已經(jīng)成了一個final class,它無法在被任何其他class繼承。???
例如:?
class D : public C //編譯錯誤???
D嘗試繼承自C,C又虛擬繼承了vb,虛擬繼承的一個特性是,被虛擬繼承的基類(指vb)總是在派生層次最深的類(指D)中構(gòu)造,因此D需要訪問vb的構(gòu)造函數(shù)才能將自己建立起來。由于vb的構(gòu)造函數(shù)是private,而且僅僅指定了唯一的一個friend C,因此D是無權(quán)訪問vb::vb(),也就根本無法通過編譯。???

這樣,C也成為了一個無法被繼承的類。vb和虛擬繼承是它的一個實現(xiàn)手法。


#include <iostream>
using namespace std;
class va?
{
friend class vb;
private:
va(){}
~va(){}
};
class vb:public virtual va{
};
class vc:public vb {};
int main()
{
vc a;//實例化才報錯,虛擬集成會跳過vb的構(gòu)造函數(shù),去執(zhí)行va的,但是vc不是va的友元
}

總結(jié)

以上是生活随笔為你收集整理的C++创建 可以实例化但不能继承的类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。