C++学习笔记-----函数调用时的决议:名字查找,重载决议,可访问性检测
生活随笔
收集整理的這篇文章主要介紹了
C++学习笔记-----函数调用时的决议:名字查找,重载决议,可访问性检测
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
第一個程序
class myClass { public:myClass() {}double func(double n) { return n; } private:int func(int n) { return n; } };int main() {myClass mc;mc.func(7); //報錯return 0; }程序在編譯的過程中會報錯,而不是返回7,原因如下:
編譯器在對func(7)這個調用進行決議時,主要做了三件事情,依次如下:
可訪問性檢查:編譯器進行訪問行檢測,確定被選定的函數是否可以被調用。
綜上,在進行可訪問性檢查時發現,func(int)函數處于private作用域中,不能夠被調用,所以在對func(7)進行調用時會報錯。
編譯過程會報錯:無法訪問private成員,函數myClass::func(int)不可訪問。
第二個程序
class myClass { public:myClass() {}double func(double n) { return n; } private:unsigned func(unsigned n) { return n; } //不是int而是unsigned };int main() {myClass mc;mc.func(7); //報錯return 0; }在調用func(7)時同樣會進行上述的三步決議,
編譯過程會報錯:對重載函數的調用不明確。
第三個程序
#include <string>int func(int); //全局函數class myClass { public:double test(){return func(7); //調用哪個?} private:std::string func(std::string) //類內部函數{return "hello world!";} };int main() {myClass mc;mc.test(); }這個程序包含一個全局函數func(int),一個類內部的函數func(std::string);
程序通過test接口調用func(7)函數,同樣也需要進行決議:
編譯過程會報錯:沒有從int到std::string的適當轉換。
總結
以上是生活随笔為你收集整理的C++学习笔记-----函数调用时的决议:名字查找,重载决议,可访问性检测的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++学习笔记-----输出数据的另一种
- 下一篇: C++学习笔记-----std::pai