本人大一计算机新生,学完c在学c++,看到一行代码如下:
#include <iostream>
using namespace std;
class stu
{
public:
int a;
int set(int n)
{
b = n;
return b;
}
private:
int b;
};
int main()
{
stu s;
cout << s.set(1);
}
这是一个用成员函数set给私有变量b赋值的程序,我想问一下,成员函数set里面直接用的b,也就是说成员私有变量b的作用域覆盖了成员函数set?那么我想知道:
1、是不是类中所有成员变量的标识符作用域都覆盖整个类的内部
2、如果(1)的答案是正确的话,那么如果我改一下成员函数:int set(int b),让形参标识符也是‘b’,(经vs测试没有报错)那么此时编译器又是怎么操作的呢,不会产生歧义么?(自己试了半天,也不知道该怎么测试才能说明问题,网上也找不到相关答案(捂脸))
3、还有一点点关于构造函数的,对于无形参构造函数,它是对公有还是私有成员变量进行赋初值?而且同上问,它貌似也是上来直接啪啦啪啦把成员标识符一写、一赋值就ok了?
//总之,最大的问题就是:类中给成员变量赋初值貌似就是直接在成员函数中直接操作(而没有什么访问什么的流程),这种方法真的不会跟同名的形参引起歧义么?成员函数内部跟整个类都是联通的?如果是的话,怎么解释同名形参不报错?如果不是联通的话,那么形参如果是同名的,整个成员函数始终只是玩弄一个局部变量,内部成员不会改变,没有达到预期的效果,还不如用更复杂严谨的语言进行访问改变?(感觉上是一个功能的漏洞...吗)
新人一枚,虽语无伦次,身无分文,却也是热爱着编程,所以希望大佬们理解一下0.0