首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我应该在C++中为成员变量和函数参数使用相同的名称

在C++中,为成员变量和函数参数使用相同的名称是不建议的,因为这可能导致混淆和错误。当成员变量和函数参数具有相同的名称时,函数参数会遮蔽成员变量,导致在函数内部无法访问成员变量。

例如,以下代码中的函数setValue无法正确设置成员变量value的值:

代码语言:cpp
复制
class MyClass {
public:
    int value;

    void setValue(int value) {
        value = value; // 这里的 value 是函数参数,遮蔽了成员变量 value
    }
};

为了避免这种情况,建议为成员变量和函数参数使用不同的名称。例如,可以将函数参数的名称更改为newValue

代码语言:cpp
复制
class MyClass {
public:
    int value;

    void setValue(int newValue) {
        value = newValue; // 现在可以正确设置成员变量 value 的值
    }
};

尽管如此,如果您确实需要在成员函数中使用相同的名称,可以使用this指针来访问成员变量。例如:

代码语言:cpp
复制
class MyClass {
public:
    int value;

    void setValue(int value) {
        this->value = value; // 使用 this->value 来访问成员变量 value
    }
};

总之,为了避免混淆和错误,建议为成员变量和函数参数使用不同的名称。如果确实需要使用相同的名称,可以使用this指针来访问成员变量。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++const成员变量成员函数

在类,如果你不希望某些数据被修改,可以使用const关键字加以限定。const 可以用来修饰成员变量成员函数。...const成员变量 const 成员变量用法普通 const 变量用法相似,只需要在声明时加上 const 关键字。...初始化 const 成员变量只有一种方法,就是通过构造函数初始化列表,这点在前面已经讲到了,请猛击《C++初始化列表》回顾。...const成员函数(常成员函数) const 成员函数可以使用所有成员变量,但是不能修改它们值,这种措施主要还是为了保护数据而设置。const 成员函数也称为常成员函数。...我们通常将 get 函数设置成员函数。读取成员变量函数名字通常以get开头,后跟成员变量名字,所以通常将它们称为 get 函数

25130

C++】构造函数初始化列表 ③ ( 构造函数 初始化列表 const 成员变量初始化 )

构造函数初始化列表 总结 : 初始化列表 可以 成员变量 提供初始值 ; 初始化列表 可以 调用 类 成员变量 类型 构造函数 进行成员变量初始化操作 ; 初始化列表 可以 使用 构造函数...传入 参数 ; 类初始化时 , 根据定义顺序 , 先调用 成员变量 构造函数 , 然后调用外部类构造函数 , 析构函数正好相反 ; 实例对象 const 成员变量 必须只能在 初始化列表 中进行...初始化 , 所有的构造函数都要进行初始化操作 ; 一、构造函数 初始化列表 const 成员变量初始化 1、初始化 const 常量成员 如果 类 定义了 被 const 修饰 成员变量..., 对 常量成员 进行初始化操作 ; 3、正确代码示例 - 在初始化列表初始化常量成员 在下面的 类 B , 所有的 构造函数 , 都要使用 初始化列表 初始化 常量成员 , 只要遗漏一个构造函数...; // 常量成员 }; int main() { // 通过 B 有参构造函数 // 其中 构造函数参数 作为 参数列表 参数值 B b(10, 10, 150); // 控制台暂停

20430
  • C++初阶】:C++入门篇(一)

    无论是C语言还是C++,在同一个局部域里面是不允许出现相同变量,在同一个作用域下定义了两个相同变量变量会导致访问冲突,编译器不知道该使用哪个变量,从而导致报错。...不仅仅是变量名,函数相同也是一样C++函数重载除外)。这也导致在一群人写同一个项目时,写完在合并之后可能导致函数名或变量名冲突问题,解决这个问题,C++命名空间孕育而生。...1.1 命名空间定义 定义命名空间时,需要用到namespace这个关键字,后面紧跟命名空间名字,再接一队 {},{} 命名空间成员。...了解完命名空间后,我们也算知道了为什么每次写C++程序时总要写一句using namespace std; std::是个名称空间标识符,C++标准库函数或者对象都是在命名空间std定义,所以我们要使用标准库函数或者对象都要用...其实只要我们仔细想一下就应该知道缺省值应该在函数声明时给,因为函数往往都是先声明后使用,如果我们在声明函数时没有缺省值,但定义时又给了缺省值,就容易导致声明与定义不一致,另外,修改函数声明比修改函数定义要方便

    9510

    【计算机本科补全计划】Java学习笔记(二) 基础语法红黄蓝

    源文件名:源文件名必须类名相同。当保存文件时候,你应该使用类名作为文件名保存(切记Java是大小写敏感),文件名后缀.java。(如果文件名类名不相同则会导致编译错误)。...方法、变量、构造函数也可以在枚举定义。 ? 类似于C/C++,Java也支持单行以及多行注释。注释字符将被Java编译器忽略。...变量声明初始化都是在方法,方法结束后,变量就会自动销毁。 成员变量成员变量是定义在类,方法体之外变量。这种变量在创建对象时候实例化。...一个类可以拥有多个方法,在上面的例子:barking()、hungry()sleeping()都是Dog类方法。 ---- 12、 构造方法(C++构造函数之 改头换面!)...你跟c++有啥区别!!new么?感觉C++好简洁) 声明:声明一个对象,包括对象名称对象类型。 实例化:使用关键字new来创建一个对象。

    90060

    Effective C++笔记

    const可被施加于任何作用域内对象、函数参数函数返回类型、成员函数本体 编译器强制实施bitwise constness,但你编写程序时应该使用“概念上常量性” 当constnon-const...成员函数有着实质等价实现时,令non-const版本调用const版本可避免代码重复 4.确定对象被使用前已被初始化 内置型对象进行手工初始化,因为C++不保证初始化它们 构造函数最好使用成员初始值列...初值列列出成员变量,其排列次序应该和它们在class声明次序相同 免除“跨编译单元之初始化次序”问题,请以local static对象替换non-local static对象 5....成对使用newdelete时,要采取相同形式 如果你在new表达式中使用[],必须在相应delete表达式使用[]。如果在new表达式使用,在delete也不要使用 17....,往往可消除,做法是以函数参数或class成员变量替换template参数 因类型参数而造成代码膨胀,往往可降低,做法是让带有完全相同二进制表述具现类型共享实现码 45.

    80920

    C++必知必会之基础知识-常用关键(3)

    在需要移植性可靠性场景,建议使用常规数据成员而不是位域 extern “C” 在C++,extern "C"是一个用于声明C语言风格函数变量关键字。...使用extern "C"可以告诉C++编译器将某些函数变量按照C语言规则进行处理,以实现CC++之间混合编程。...使用extern "C"有以下几个常见场景: C++调用C语言库:当C++代码需要调用一个由C语言编写库时,由于CC++之间名称修饰不同,需要使用extern "C"来正确链接C语言函数。...需要注意是,extern "C"应该只用于CC++之间函数全局变量声明,而不应该用于类定义成员函数。因为类成员函数涉及到C++特性,无法通过简单名称修饰解决链接问题。...使用哪个关键字取决于编程风格设计选择。 union 在C++,union是一种特殊数据结构,允许在相同内存位置存储不同数据类型。

    14230

    Effective C++: 改善程序与设计55个具体做法

    条款01:视C++一个语言联邦 请记住 ■ C++高效编程守则视状况而变化,取决于你使用C++哪一部分。...初值列列出成员变量,其排列次序应该和它们在class声明次序相同。 ■ 免除“跨编译单元之初始化次序”问题,请以local static对象替换non-localstatic对象。...条款13:以对象管理资源 请记住 ■ 防止资源泄漏,请使用RAII对象,它们在构造函数获得资源并在析构函数释放资源。...条款16:成对使用newdelete时要采取相同形式 请记住 ■ 如果你在new表达式中使用[],必须在相应delete表达式使用[]。...■ 因非类型模板参数(non-type template parameters)而造成代码膨胀,往往可消除,做法是以函数参数或class成员变量替换template参数

    68720

    C++知识总结

    引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称引用名,不能再把该引用名作为其他变量别名。...(2)使用引用传递函数参数,在内存并没有产生实参副本,它是直接对实参操作;而使用一般变量传递函数参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量副本;如果传递是对象,还将调用拷贝构造函数...因此上面的表达式就是试图将一个const类型对象转换为非const类型,这是非法。 引用型参数应该在能被定义const情况下,尽量定义const 。 8....在派生类重新定义此函数,要求函数名、函数类型、函数参数个数类型全部与基类函数相同,并根据派生类需要重新定义函数体。...C++规定,当一个成员函数被声明为虚函数后,其派生类同名函数都自动成为虚函数

    99540

    关于JAVA你必须知道那些事(一):概述

    3、开发环境 Java可以下windowslinux等系统下进行开发,这里仅介绍在windows下开发需要设置环境参数,在安相应版本JDK之后,进行变量设置。...源文件名:源文件名必须类名相同。当保存文件时候,你应该使用类名作为文件名保存(切记Java是大小写敏感),文件名后缀.java。(如果文件名类名不相同则会导致编译错误)。...另外:java没有头文件,它是以import方法从外面导入.class文件; javamain函数是包含在一个类,与C++是不一样,在C++没有定义类也是一个程序。...(即包包含很多种类接口) 当编译一个.java文件(即一个编译单元)时,在.java文件每个类都会有一个输出文件,而该输出文件名称与.java文件每个类名称相同,只是多了一个后缀名.class...(数组a,a.length数组长度),Array类具有一些函数可以对数组进运算。 6、Java高级特性接口 Java类继承只允许一个父类,当需要进行多个继承时,需要使用接口。

    75920

    CC++static变量static函数用法

    比如类声明放在list.h而实现 房子List.cpp,这也就是平常见到C++程序文件模式。 同样静态成员数据也有publicprivate之分。...声明方法:static 数据类型 成员变量名 初始化方法: static 类名::成员变量名 = 值 静态成员函数相同与静态成员数据,静态成员函数也是属于某个类而非某个对象 声明方法: static...返回值类型 函数名(参数列表) 具体实现方法: 类名::函数名(参数列表) 注意:没有staic 返回值类型了 ————————————————————– Class Node{ public...语言中使用,第三种只在C++使用(C,C++具体细微操作不尽相同, 本文以C++为准). (1)局部静态变量 (2)外部静态变量/函数 (3)静态数据成员/成员函数 下面就这三种使用方式及注意事项分别说明...无法使用file1.cpp文件static函数 三、静态数据成员成员函数(C++特有) C++重用了这个关键字,并赋予它与前面不同第三种含义:表示属于一个类而不是属于此类任何特定对象变量函数

    2.1K30

    C++C++ this 指针用法 ① ( C++ this 指针引入 | this 指针用法 | 代码示例 )

    this 指针用法 C++ this 指针用法 : 使用 this 作为指针 : 在 非静态成员函数 , 直接使用 this 作为 本实例对象 指针 ; this 使用 this-> 访问成员变量...访问成员变量 : 在 非静态成员函数 , 直接使用如下语法 , 访问 本实例对象 非静态成员变量 ; 先获取指针指向数据 然后访问数据成员变量 ; (*this).成员变量名 在 C++...成员变量 ; 在下面的代码 , 参数名称也是 age height , 与 成员变量名称重名了 , 使用 this 指针可以有效区分 函数参数成员变量 重名问题 ; 使用 代码 this..., 构造函数 Student(int age, int height) 参数名为 age height , 成员变量 int age int height , public: int age...; // 年龄 int height; // 身高 正好 , 成员变量名称参数相同 , 这里使用 this 关键字 , 可以解决名称冲突问题 ; 代码示例 : #include "iostream

    28920

    c++面试选择题_C语言经典笔试题

    C++多态性具体体现在运行编译两个方面: 在程序运行时多态性通过继承函数来体现; 在程序编译时多态性体现在函数运算符重载上; 虚函数:在基类冠以关键字 virtual 成员函数。...这时,被调函数形参就成为原来主调函数实参变量或对象一个别名来使用,所以在被调函数对形参变量操作就是对其相应目标对象(在主调函数操作。...(2)使用引用传递函数参数,在内存并没有产生实参副本,它是直接对实参操作;而使用一般变量传递函数参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量副本;如果传递是对象,还将调用拷贝构造函数...(3)使用指针作为函数参数虽然也能达到与使用引用效果,但是,在被调函数同样要给形参分配存储单元,且需要重复使用”*指针变量名”形式进行运算,这很容易产生错误且程序阅读性较差;另一方面,在主调函数调用点处...因此上面的表达式就是试图将一个const类型对象转换为非const类型,这是非法。引用型参数应该在能被定义const情况下,尽量定义const 。

    1.1K10

    c++面试题

    C++多态性具体体现在运行编译两个方面:在程序运行时多态性通过继承函数来体现; 在程序编译时多态性体现在函数运算符重载上 虚函数:在基类冠以关键字 virtual 成员函数。...引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称引用名,不能再把该引用名作为其他变量别名。...(2)使用引用传递函数参数,在内存并没有产生实参副本,它是直接对实参操作;而使用一般变量传递函数参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量副本;如果传递是对象,还将调用拷贝构造函数...(3)使用指针作为函数参数虽然也能达到与使用引用效果,但是,在被调函数同样要给形参分配存储单元,且需要重复使用"*指针变量名"形式进行运算,这很容易产生错误且程序阅读性较差;另一方面,在主调函数调用点处...因此上面的表达式就是试图将一个const类型对象转换为非const类型,这是非法。引用型参数应该在能被定义const情况下,尽量定义const 。

    1.2K21

    【笔记】《Effective C++》条款26-55

    (name-hiding), 至于这两个名称类型是否相同并不被考虑 这是非常危险特性, 如下图派生类mf3函数会将基类两个mf3一起进行遮掩, 无论基类那两个函数类型形式是什么样 因此对于公有继承来说..., 令用户只修改核心部分, 但利用总接口来使用 NVI手法需要允许用户修改私有的虚函数, 这恰好是C++"派生类可以重新定义继承来私有虚函数, 因为继承而来函数与基类无关"这个特性应用 当派生类需要使用基类一些内容时虚函数也会被写..., 只重载一样名称参数有关, 所以很容易二义 更复杂情况是下图"菱形继承": 菱形继承, 对于不同基类都拥有的同名成员, C++默认会复制多份以供使用, 如果不希望复制就应该使用虚继承,...双重意义 typename一般出现在模板参数作为参数前缀, 在这种情况下typenameclass是等价(但是typename较晚推出, 建议使用语义更清晰typename) 当一个模板某个名称依赖于模板参数时...核心手法简化普通函数相同, 就是将模板操作不变部分抽离出来, 独立成尽可能与模板无关代码, 通过指针之类方法进行连接使用 但是简化时候也要注意有些时候抽离得越复杂, 副作用就越多, 所以要形成效率与安全性之间取舍

    91630

    【笔记】《Effective C++》条款1-25

    上周看完了这本大名鼎鼎《Effective C++》,属实学到了很多技巧,本文是阅读途中做记录。...这些行为结果并非报错, 而是与编译器执行环境相关无法估计结果 "接口"通常指函数签名 1 让自己习惯C++ 1 视C++一个语言联邦 将C++看作是以多个相关语言组成结合体而不是一个关系紧密单一语言...使用初值列初始化时候还要注意成员依赖问题, 时刻记得: 成员在初值列初始化顺序至于其在类内声明顺序相同, 为了防止混乱我们应该也按照声明顺序在初值列进行排列 以上可能导致初值列本身产生重复,...那么对于那些赋值直接初始化效果一样好(例如那些需要借助数据库进行真正初始化成员)则应该移进一个统一特殊函数(Setup函数), 然后在构造函数调用这个函数 对于static成员又要注意, C..., 因为大多数运算符都需要符合交换律, 而此时如果是成员函数, 调用函数对象本身并不处于参数, 这会导致调用错误), 应该使用成员函数然后写入所有所需参数 member反面是non-member

    1K30

    C++编译与链接(0)-.h与.cpp定义与声明

    show@@YAXXZ) 已经在 a.obj 定义  所以要避免在头文件定义函数 2、在不同.cpp定义函数原型(函数返回值,函数名称函数参数)不能完全一样, 比如如果有在两个.cpp文件均存在...(*C++11,标准允许使用等号=或者花括号{}进行就地非静态成员变量初始化) 在类内部定义成员函数将自动作为inline处理 在.h外部定义函数需要加上inline说明 否则在被include...show@A@@QAEXXZ) 已经在 a.obj 定义    类const成员 在类声明变量const类型成员不可以就地初始化 const常量初始化必须在构造函数初始化列表初始化,而不可以在构造函数函数体内初始化...- 不可以 (*C++11,标准允许使用等号=或者花括号{}进行就地非静态成员变量初始化) 类成员函数 ------------------ ---------------- 在.h外部定义函数需要加上...需要到头文件以外去定义它) 类静态常量整形数据成员 ------------------ 可以 特殊说明 模板 模板函数与模板类声明与实现必须放在一个文件 至于为什么会这样,与C++编译链接

    3.6K70

    C++经典面试题(最全,面率最高)

    C++多态性具体体现在运行编译两个方面:在程序运行时多态性通过继承函数来体现; 在程序编译时多态性体现在函数运算符重载上; 虚函数:在基类冠以关键字 virtual 成员函数。...引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称引用名,不能再把该引用名作为其他变量别名。...(2)使用引用传递函数参数,在内存并没有产生实参副本,它是直接对实参操作;而使用一般变量传递函数参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量副本;如果传递是对象,还将调用拷贝构造函数...(3)使用指针作为函数参数虽然也能达到与使用引用效果,但是,在被调函数同样要给形参分配存储单元,且需要重复使用"*指针变量名"形式进行运算,这很容易产生错误且程序阅读性较差;另一方面,在主调函数调用点处...因此上面的表达式就是试图将一个const类型对象转换为非const类型,这是非法。引用型参数应该在能被定义const情况下,尽量定义const 。

    1.8K30

    C++】构造函数与析构函数用途 ( 代码示例 - 构造函数与析构函数用途 )

    一、构造函数与析构函数C++ 语言中 , " 构造函数 " " 析构函数 " 都是 C++ 特殊函数 , 分别用于 初始化对象 销毁对象 ; C++ 类 在创建 实例对象 时自动调用...构造函数 这个特殊函数 , 其主要作用是 初始化对象成员变量 , 如果需要 可以 执行其他必要操作 ; 构造函数 名称与类名称相同 ; 构造函数 没有返回类型 ; 构造函数 可以带有参数 , 也可以不带参数...; C++ 类 在 销毁 实例对象 时自动调用 析构函数 这个特殊函数 , 其主要作用是 销毁释放对象成员变量 , 如果需要 可以 执行其他必要操作 ; 析构函数 名称 是 ~ 加上 类名称...; 析构函数 没有返回类型 ; 析构函数 不带参数 ; 二、代码示例 - 构造函数与析构函数用途 在下面的代码 : C++ 类 Student 类 有 2 个 public 共有成员变量 , public... , 使用 malloc 函数 , name 指针分配 100 字节内存 , // name 成员分配内存 name = (char*)malloc(100); 构造函数 , name

    16420

    C++】初识面向对象:类与对象详解

    2.1 定义概念定义是编程一项基础操作,涉及到特定数据分配到一个名称存储位置。...不能通过是否赋值去判断是否存在定义,而是通过是否其开辟空间。C语言结构体只能定义变量struct S s1 ={"Alice", c}; 在C++结构体内不仅可以定义变量,也可也定义函数。...类体内容称为类成员,其中类成员:1.类变量称为类属性或成员变量2.类函称为类方法或者成员函数两种定义方式:声明定义全部放在类体,需注意:成员函数如果在类定义,编译器可能会将其当成...2.3 成员变量命令规则由于在使用类过程,难免会遇到成员变量函数参数名称相同导致混淆。比如:这里如何去区分year属于成员变量还是函数参数呢?...C++通过引入this指针解决该问题,即:C++编译器给每个非静态成员函数增加了一个隐藏指针参数,让该指针指向当前对象(函数运行时调用该函数对象),在函数体中所有成员变量操作,都是通过该指针去访问

    9100

    封装、继承、多态、重载:C++强大特性与代码设计

    ,它将数据(成员变量操作(成员函数)封装在一个类,通过访问控制来限制对类内部实现访问。...重载 在C++函数重载(Function Overloading)是指在同一个作用域内,可以定义多个具有相同名称参数列表不同函数。...通过函数重载,可以根据参数类型、顺序个数来区分不同函数,并且可以为相同操作提供不同实现。 函数重载特点如下: 函数名称相同:重载函数必须具有相同名称。...函数重载允许我们使用相同函数名,但根据参数类型、顺序个数来区分不同函数。这样,我们可以提供不同函数实现来处理各种情况,而无需每种情况编写不同函数名称。...总而言之,函数重载是C++中一个强大特性,可以使代码更加灵活和易于使用我们提供了更多选择可能性。合理地利用函数重载,可以使我们代码更加清晰、高效,同时提高开发效率代码可维护性。

    32410
    领券