代码:
#include<iostream> using namespace std; int year = 55; //全局变量 int month = 56; int day = 57; void Set(int y, int m,int d) //全局函数 { year=y; //给全局变量赋值 month=m; day=d; } void PPP() //全局函数 { cout << "*global*" << endl; cout << year << " " << month << " " << day << endl; } class TimeDate { public: void Set(int y,int m,int d) //成员函数 { year=y; //给成员变量赋值 ::month=m; //给全局变量赋值 day=d; //使用::表明是全局函数 //不使用:: 按先成员函数后全局函数的顺序查找函数 ::PPP(); //使用全局函数,而不是成员函数 PPP(); //使用成员函数,而不是全局函数 } void PPP() { cout << "*local*" << endl; cout << year << " " << month << " " << day << endl; } void PPP1() { cout << "*local->global*" << endl; cout << ::year << " " << ::month << " " << ::day << endl; } private: int year; //成员变量 int month; int day; }; int main(int argc, const char argv) { TimeDate t; cout << "origin value" << endl; t.PPP(); t.PPP1(); PPP(); cout << "after global function Set work" << endl; Set(1,2,3); t.PPP(); PPP(); cout << "after member function Set work" << endl; t.Set(4,5,6); t.PPP(); PPP(); cout << "program end" << endl; return 0; }
运行结果:
origin value *local* 0 16 0 *local->global* 55 56 57 *global* 55 56 57 after global function Set work *local* 0 16 0 *global* 1 2 3 after member function Set work *global* 1 5 3 *local* 4 16 6 *local* 4 16 6 *global* 1 5 3 program end
分析与结论:
1、全局变量与成员变量同名:全局函数默认使用的是全局变量,只有通过访问对象的成员才可以获取成员变量的值;而成员函数优先使用的是成员变量,但是可以通过在成员变量名前面加上::来显式说明这是全局变量,此时成员函数使用的就是全局变量。另外,成员函数按照先成员变量后全局变量的顺序使用变量,换句话说,也就是成员函数优先使用成员变量,若变量名在成员变量中找不到时才会去查找和使用全局变量,若全局变量里面也没有变量名,则报错。
2、全局函数与成员函数同名:在类的外面,一般情况下调用的是全局函数,只有通过访问对象的成员函数才可以使用成员函数;在类的里面,调用的是成员函数,但是可以在成员函数前面加上::来显示说明需要调用的是全局函数。另外,按照先成员函数后全局函数的顺序来调用函数,换句话说,也就是优先使用成员函数,若成员函数不存在,才会去查找和使用全局函数,若全局函数里面也没有这个函数,则报错。
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/12258.html