C++默认实参怎么使用非静态的类成员,举个例子
时间: 2024-03-05 14:51:27 浏览: 54
C++默认实参可以使用非静态的类成员,举个例子如下:
```c++
#include <iostream>
using namespace std;
class MyClass {
public:
int myFunc(int x = m_default); // 默认实参为非静态类成员
private:
int m_default = 10; // 非静态类成员
};
int MyClass::myFunc(int x) {
return x;
}
int main() {
MyClass obj;
cout << obj.myFunc() << endl; // 输出结果为 10
cout << obj.myFunc(5) << endl; // 输出结果为 5
return 0;
}
```
在上述代码中,`myFunc` 函数的默认实参为非静态类成员 `m_default`。在类定义中,我们可以直接将 `m_default` 作为默认实参使用。在 `main` 函数中,我们创建了一个 `MyClass` 类的对象 `obj`,并分别调用了 `myFunc` 函数,不传递实参和传递实参 `5`,输出结果分别为 `10` 和 `5`。
相关问题
CPP参考手册中提到"除非用于构成成员指针或在成员访问表达式中使用",能否对应那句话举一个默认实参中使用非静态类成员的例子
非常抱歉,我之前的回答中存在错误。在 C++ 中,类成员变量不能用于函数的默认参数中,而且类成员变量也不能用于成员函数指针或成员访问表达式中。
这是因为,类成员变量的值是需要依赖类的对象才能确定的,而默认参数的值是在编译期间确定的。因此,不能使用类成员变量作为默认参数。
关于“除非用于构成成员指针或在成员访问表达式中使用”的说明是指,如果需要使用类成员变量的地址或者需要访问类成员变量的值,可以使用成员指针或成员访问表达式。具体示例代码如下:
```c++
#include <iostream>
using namespace std;
struct Foo {
int x;
int y;
int myFunc(int Foo::*p = &Foo::x) { // 成员指针作为默认参数
return this->*p;
}
};
int main() {
Foo f;
f.x = 10;
f.y = 20;
cout << f.myFunc() << endl; // 输出结果为 10
cout << f.myFunc(&Foo::y) << endl; // 输出结果为 20
return 0;
}
```
在上述代码中,`myFunc` 函数的参数使用了成员指针 `p`,默认值为 `&Foo::x`,即类成员变量 `x` 的地址。在 `myFunc` 函数内部,使用 `this->*p` 访问了类成员变量的值。在 `main` 函数中,我们创建了一个 `Foo` 类的对象 `f`,并分别调用了 `myFunc` 函数,不传递实参和传递实参 `&Foo::y`,输出结果分别为 `10` 和 `20`。
阅读全文