c++类变量作为方法参数
C++ class variables as method parameters?
当我们定义一个类的方法时,如果我们使用类变量(无论是公共的还是私有的)作为方法的参数是对的吗?
换句话说,哪一个"更正确"?
定义后,
class myclass{
public:
int x, y;
double foo(int, int, int);
private:
int z;
}
这样可以吗
double myclass::foo(int x, int y, int z) {/* Blah Blah */}
或
double myclass::foo(int xx, int yy, int zz){x=xx; y=yy; z=zz /* Blah Blah*/}
这两个:
double myclass::foo(int x, int y, int z) {/* Blah Blah */}
double myclass::foo(int xx, int yy, int zz){x=xx; y=yy; z=zz /* Blah Blah*/}
不要做同样的事情。第一个声明了一个函数,它的参数叫做x
、y
和z
。因为它们的命名与类作用域变量相同,所以它们隐藏了类作用域变量。要访问"Blah Blah"内部的隐藏成员,您必须使用this->x
等等。
这个不会导致参数被直接转发到类成员的值中。
两种方式都可以。如果您需要消除歧义,只需使用this
关键字:
this->x = x;
这是"OK"的方式,与允许您打开新作用域和隐藏名称的方式相同:
int a;
void foo()
{
int a;
{
int a;
// how do we refer to the other two now?
}
}
如果你的函数定义对参数变量使用了与类作用域中已经使用的相同的符号,那么函数作用域符号会隐藏外部作用域中的符号。您有时可以消除歧义(例如,在我的示例中使用::a
,或在您的示例中使用this->x
),但正如我的示例所示,您总是可以隐藏变量,以至于它不再是可寻址的。
相关文章:
- c++方法参数只能在linux的发布模式下自行更改
- 使用移动语义:右值引用作为方法参数
- 无法将动态创建的对象数组从 qml 发送到 c++ 作为方法参数
- 将方法参数类型更改为子类中的派生类
- ofstream作为C 中的方法参数
- 使用 gmock 匹配器将 std::function 设置为 EXPECT_CALL 中的方法参数
- C com 方法参数扣除
- 获取非静态方法参数计数
- 使用 gmock 返回模拟方法参数
- 运行 QML 时出现"未知方法参数类型"错误
- 基本C - 构造contaning对象引用,并将其作为方法参数传递
- 将C 方法参数转换为模板参数会因编译错误而失败
- 如何在方法参数中使用boost :: asio :: buffer
- qsharedPointer作为方法参数或方法的返回值的良好实践
- 如何将方法指针声明为Typedef方法参数
- 方法参数中的 OpenCV 垫"预期")""
- 方法参数中的 consst* 常量
- 带有“class”详细类型说明符的方法参数
- 具有原始方法参数派生类的 C++ 重载方法参数
- C++ std::string length() 或 size() 不适用于方法参数