weixin_44047790 2019-03-25 21:08 采纳率: 0%
浏览 2074

关于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条回答

  • qq_39310287 2019-03-25 22:12
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 Qt下使用tcp获取数据的详细操作
  • ¥15 idea右下角设置编码是灰色的
  • ¥15 全志H618ROM新增分区
  • ¥20 jupyter保存图像功能的实现
  • ¥15 在grasshopper里DrawViewportWires更改预览后,禁用电池仍然显示
  • ¥15 NAO机器人的录音程序保存问题
  • ¥15 C#读写EXCEL文件,不同编译
  • ¥15 MapReduce结果输出到HBase,一直连接不上MySQL
  • ¥15 扩散模型sd.webui使用时报错“Nonetype”
  • ¥15 stm32流水灯+呼吸灯+外部中断按键