weixin_44047790
weixin_44047790
2019-03-25 21:08

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

  • 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

  • 点赞
  • 回答
  • 收藏
  • 复制链接分享

1条回答