首页 > 后端开发 > C++ > 正文

为什么不能在 C 成员函数中使用成员变量作为默认参数?

Linda Hamilton
发布: 2024-11-10 10:23:02
原创
640 人浏览过

Why Can't I Use Member Variables as Default Arguments in C   Member Functions?

在 C 中使用成员变量作为默认参数

在面向对象编程中,成员变量通常用作方法参数的默认值。但是,当尝试将成员变量设置为默认参数时,您可能会遇到“无效使用非静态数据成员”之类的错误。

问题描述

您的目标是使成员函数的参数可选,在未提供参数时使用成员变量作为默认值。但是,您的代码会生成错误消息“无效使用非静态数据成员”。您怀疑代码有问题,但不确定解决方案。

代码片段

以下是提供的代码来说明问题:

class Object {
public:
    void MoveTo(double speed, Point position);
protected:
    Point initPos; 
    Point currPos;
};

void Object::MoveTo(double speed, Point position = initPos) {
    currPos = postion;
}
登录后复制

解决方案

成员的默认参数表达式函数只能依赖于类或全局范围内的元素。此外,必须在方法的声明(头文件)中定义默认参数。

要解决此问题,请使用 MoveTo 方法的两种重载:一种具有单个参数,另一种具有两个参数。具有单个参数的方法调用具有两个参数的方法,并传递预期的默认值。

void Object::MoveTo(double speed) {
    MoveTo(speed, initPos);
}

void Object::MoveTo(double speed, Point position) {
    // Implementation
}
登录后复制

通过调用 MoveTo(double) 并随后调用 MoveTo(double, Point),此技术允许您遵循 DRY 原则(不要重复),仅实现 MoveTo 一次。

以上是为什么不能在 C 成员函数中使用成员变量作为默认参数?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板