C++ 虛函數(shù)與純虛函數(shù)代碼詳解
什么是虛函數(shù):
虛函數(shù) 是在基類中使用關(guān)鍵字 virtual 聲明的函數(shù),在C++ 語言中虛函數(shù)可以繼承,當(dāng)一個(gè)成員函數(shù)被聲明為虛函數(shù)之后,其派生類中的同名函數(shù)都自動(dòng)生成為虛函數(shù),
虛函數(shù)主要體驗(yàn)C++的多態(tài)方面,(多態(tài)是參數(shù)個(gè)數(shù)和類型相同而實(shí)現(xiàn)功能不同的函數(shù))
為了更好的里面虛函數(shù)請看下面的demo
#include <iostream>
#include <string>
using namespace std;
class Aname
{
public:
virtual void function_name()
{
cout << "Aname調(diào)用了function_name" << endl;
}
};
class Bname:public Aname
{
public:
void function_name()
{
cout << "Bname調(diào)用了function_name" << endl;
}
};
int main()
{
Aname *a = new Bname();
a->function_name();
}
這里由于類Aname 里面的function_name 被聲明為虛函數(shù), 所以雖然指針a 指向Aname 卻調(diào)用了
Bname 里面的function_name
打印結(jié)果為

如果類Aname 里面的函數(shù)沒有聲明虛函數(shù), 是調(diào)用A里面的函數(shù)的,
虛函數(shù)的注意事項(xiàng):
1 只有類的成員函數(shù)才能為虛函數(shù)
2 靜態(tài)成員函數(shù)不能為虛函數(shù),內(nèi)聯(lián)函數(shù)和構(gòu)造函數(shù)不能為虛函數(shù)
存虛函數(shù)
是指被表明為不被具體實(shí)現(xiàn)的虛成員函數(shù),它不具備函數(shù)的功能,它在基類中沒有定義,但要求任何派生類都要定義自己的實(shí)現(xiàn)方法。在基類中實(shí)現(xiàn)純虛函數(shù)的方法是在函數(shù)原型后加"=0"
例如:
virtual void funtion1()=0
demo 認(rèn)識(shí)下存虛函數(shù)
#include <iostream>
#include <string>
using namespace std;
class Aname
{
public:
virtual void function_name() = 0;
};
class Bname : public Aname
{
public:
void function_name()
{
cout << "Bname調(diào)用了function_name" << endl;
}
};
int main()
{
Aname *a = new Bname();
a->function_name();
}
存虛函數(shù)的注意事項(xiàng):
1 存虛函數(shù)不能被實(shí)例化
2 virtual void function_name() = 0; 中 viertual 不能去掉,否則會(huì)報(bào)錯(cuò)
總結(jié)
本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
Java實(shí)現(xiàn)駝峰和下劃線互相轉(zhuǎn)換的示例代碼
Java對各種變量、方法和類等要素命名時(shí)使用的字符序列稱為標(biāo)識(shí)符,凡是自己可以起名字的地方都叫標(biāo)識(shí)符。本文為大家分享了Java中如何實(shí)現(xiàn)駝峰命名與下劃線命名的互轉(zhuǎn),感興趣的可以了解一下2022-05-05
解決 java: 程序包c(diǎn)om.baomidou.mybatisplus.annotation不存在
在使用Java編寫程序時(shí),經(jīng)常會(huì)遇到各種編譯錯(cuò)誤或運(yùn)行時(shí)異常,本文主要介紹了解決java:程序包c(diǎn)om.baomidou.mybatisplus.annotation不存在,具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03
SpringBoot服務(wù)設(shè)置禁止server.point端口的使用
本文主要介紹了SpringBoot服務(wù)設(shè)置禁止server.point端口的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-01-01
如何修改json字符串中某個(gè)key對應(yīng)的value值
這篇文章主要介紹了如何修改json字符串中某個(gè)key對應(yīng)的value值操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11
基于SpringBoot實(shí)現(xiàn)HTTP請求簽名驗(yàn)證機(jī)制
在分布式系統(tǒng)交互中,API接口的安全性至關(guān)重要,本文將深入解析基于Spring Boot實(shí)現(xiàn)的HTTP請求簽名驗(yàn)證機(jī)制,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-04-04
Java攔截器Interceptor實(shí)現(xiàn)原理及代碼示例
本文詳細(xì)講解了Java攔截器Interceptor實(shí)現(xiàn)原理及代碼示例,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12
NoHttpResponseException問題排查解決記錄分析
這篇文章主要為大家介紹了NoHttpResponseException問題排查解決記錄分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
SpringCloudConfig之client端報(bào)錯(cuò)Could?not?resolve?placeholder問
這篇文章主要介紹了SpringCloudConfig之client端報(bào)錯(cuò)Could?not?resolve?placeholder?‘from‘?in?value?“${from}“問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助2022-12-12

