C++类成员函数
世界杯场地 775 2025-06-23 20:26:57

代码:

#include

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、全局函数与成员函数同名:在类的外面,一般情况下调用的是全局函数,只有通过访问对象的成员函数才可以使用成员函数;在类的里面,调用的是成员函数,但是可以在成员函数前面加上::来显示说明需要调用的是全局函数。另外,按照先成员函数后全局函数的顺序来调用函数,换句话说,也就是优先使用成员函数,若成员函数不存在,才会去查找和使用全局函数,若全局函数里面也没有这个函数,则报错。

堆栈不是堆栈 堆栈不是堆栈

192***0438@qq.com

2年前 (2023-09-11)

Copyright © 2022 98世界杯_乌拉圭世界杯 - cy078.com All Rights Reserved.