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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

【C++】多态问题:基类调用子类的protected或者private函数

發布時間:2023/11/27 生活经验 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C++】多态问题:基类调用子类的protected或者private函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、問題描述

如果在基類中虛函數是public,子類中重載時標記為protected或者private函數,是否還能訪問這個函數?
答案是:
基類指針指向子類時,可以訪問,并且訪問的是子類重載后的函數;
子類指針肯定不能訪問,直接受protected、private限制。

下面測試代碼演示了上面的結論,并且順便演示了一下,基類或子類如何訪問基類的虛函數。

2、測試代碼
#include <QCoreApplication>
#include <QDebug>class BaseClass{
public:BaseClass(){ qDebug() << "BaseClass constructor"; }virtual ~BaseClass() ;virtual void publicFun() { qDebug() << "BaseClass publicFun"; }virtual void basePublic_SubProtectedFun() { qDebug() << "BaseClass basePublic_SubProtectedFun"; }virtual void basePublic_SubPrivateFun() { qDebug() << "BaseClass basePublic_SubPrivateFun"; }protected:virtual void protectedFun() { qDebug() << "BaseClass protectedFun"; }private:virtual void privateFun() { qDebug() << "BaseClass privateFun"; }
};BaseClass::~BaseClass()
{qDebug() << "BaseClass destructor";
}class SubClass : public BaseClass{
public:SubClass(){ qDebug() << "SubClass constructor"; }virtual ~SubClass() ;virtual void publicFun() { qDebug() << "SubClass publicFun"; }protected:void protectedFun() { qDebug() << "SubClass protectedFun"; }void basePublic_SubProtectedFun() { qDebug() << "SubClass basePublic_SubProtectedFun"; }private:void privateFun() { qDebug() << "SubClass privateFun"; }void basePublic_SubPrivateFun() { qDebug() << "SubClass basePublic_SubPrivateFun"; }
};SubClass::~SubClass()
{qDebug() << "SubClass destructor";
}int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);qDebug() << "多態:基類指針指向子類,可以調用子類的保護或者私有函數";BaseClass *baseSub = new SubClass;baseSub->publicFun();baseSub->BaseClass::publicFun();baseSub->basePublic_SubProtectedFun();	//在基類中是public,所以可以調用,并且調用的是子類的protectedbaseSub->BaseClass::basePublic_SubProtectedFun();	//在基類中是public,所以可以調用,并且調用的是子類的protectedbaseSub->basePublic_SubPrivateFun();baseSub->BaseClass::basePublic_SubPrivateFun();delete baseSub;SubClass *sub = new SubClass;sub->publicFun();sub->BaseClass::publicFun();// sub->basePublic_SubProtectedFun(); //因為是保護成員函數,所以不能調用sub->BaseClass::basePublic_SubPrivateFun();// sub->basePublic_SubPrivateFun(); //因為是私有成員函數,所以不能調用sub->BaseClass::basePublic_SubProtectedFun();delete sub;return a.exec();
}

打印輸出

BaseClass constructor
SubClass constructorSubClass publicFun
BaseClass publicFunSubClass basePublic_SubProtectedFun
BaseClass basePublic_SubProtectedFunSubClass basePublic_SubPrivateFun
BaseClass basePublic_SubPrivateFunSubClass destructor
BaseClass destructorBaseClass constructor
SubClass constructorSubClass publicFun
BaseClass publicFunBaseClass basePublic_SubPrivateFun
BaseClass basePublic_SubProtectedFunSubClass destructor
BaseClass destructor

總結

以上是生活随笔為你收集整理的【C++】多态问题:基类调用子类的protected或者private函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

歡迎分享!

轉載請說明來源于"生活随笔",并保留原作者的名字。

本文地址:【C++】多态问题:基类调用子类的protected或者pr