关于c++类内成员赋值的问题(大一基础)

本人大一计算机新生,学完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

c++

1个回答

1、类中成员的作用域遍布整个类,即一处定义,类内部到处可用;类外部对类成员的调用另说
2、无参构造函数赋值是对类成员赋值,不存在给公有或者私有赋值的说法;
3、形参与类成员同名,可以使用this指针调用类成员

qq_43679059
同名形参作用域不同是不会报错的,大多数编译器是这样
大约一个月之前 回复
qq_39310287
qq_39310287 回复weixin_44047790: 在哪里调用,函数结果返回到哪里
一年多之前 回复
weixin_44047790
weixin_44047790 谢谢,那请问b=n了,b的值不应该就已经赋初值了吗,为什么还要return b,这个return b返回到哪呢
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问