C++:按值将对象传递给同一类的成员函数

2024-01-09

我是 C++ 的初学者,刚刚开始学习 OOP。在下面的程序中,我添加了相同类的对象并显示了结果。但是,我无法理解这样一个事实:如果我按值将对象传递给函数,那么更改如何反映在调用函数中。这addNumbers()函数需要 Complex 类的两个对象和用于调用函数的对象(c3.addNumbers(c1, c2)) 被隐式传递给函数,但是 的值是怎样的c3.real and c3.imaginary由于调用函数受到影响addNumbers()无法访问它们在内存中的“位置”。任何帮助将不胜感激!

提前致谢!

class complex {
private:
    int real;
    int imaginary;

public:
/* Using member initializers to assign values to members */    
    complex()
        : real(0)
        , imaginary(0)
    {}

    void readData(int x, int y);

    void printData();

    void addNumbers(complex, complex);
};     

void complex::readData(int x, int y)
{
    real      = x;
    imaginary = y;
}

void complex::printData()
{
    cout << real << "+" << imaginary << "i" << endl;
}   

void complex::addNumbers(complex c1, complex c2)
{
    real      = c1.real + c2.real;
    imaginary = c1.imaginary + c2.imaginary;
}

int main(void)
{
    complex c1, c2, c3;
    c1.readData(-5,17);
    c2.readData(11,7);
    c3.addNumbers(c1,c2);
    c3.printData();

    return 0;
}

你打电话时c3.addNumbers(c1, c2)), addNumbers隐式接收pointer to c3不是副本c3。该指针可以显式地与this关键词。

所以你的函数可以这样重写:

void complex::addNumbers(complex c1, complex c2)
{
    this->real      = c1.real + c2.real;
    this->imaginary = c1.imaginary + c2.imaginary;
}

这与你原来的完全等同addNumbers功能。

换句话说:每次在成员函数中使用类成员时,都会隐式调用this->前置于该成员之前;因此,如果member是班级成员,那么member总是等价于this->member在类成员函数内部。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++:按值将对象传递给同一类的成员函数 的相关文章

随机推荐

  • 使用 SQL 编辑 XML 列。不那么结构化的 XML

    这个问题是一个这个问题的后续 https stackoverflow com q 40080985 5089204 如何通过获取 的新标签来编辑 XMLXXX 不是那么结构化的 xml 需要帮助 我对 XML 和 XQuery 非常陌生 如
  • 与 C# 和 VBA 的并行 COM 互操作

    我不是在谈论从 C 调用 VBA COM 相反 我想做的是在 MS Access 中使用 VBA 调用 C 库 而不注册 DLL 我已经玩了一段时间的并行互操作 但没有成功 我终于意识到 mdb manifest 可能不是 exe mani
  • 自动使基构造函数在派生类中可用?

    我有一个带有两个构造函数的基类 需要一个参数 public abstract class StoreBase private readonly SomeObject sobj protected StoreBase SomeObject s
  • 您重构代码的方式和频率如何?

    我的问题模糊地涉及this one https stackoverflow com questions 140677 how often should you refactor 但是 它不涉及技术或实践 我在读务实的程序员并且它强烈提倡尽可
  • 将大型 JS blob 传递给 Blazor byte[]

    我需要使用录制一些音频 甚至视频媒体API https developer mozilla org en US docs Web API MediaRecorder in JS example https mbuotidem github
  • 在生产中部署 Spring Boot

    我们有一个 Spring Boot Angular 应用程序 目前我们正在将其打包为 jar 并运行它 可以将包装用作 JAR 吗 或者我们应该转向 WAR 类型的包装 会有什么不同呢 除了部署方式之外 没有其他区别 使用 JAR 时 Sp
  • GridX启动后如何重新计算列宽?

    根据文档 https github com oria gridx wiki Create the Simplest Gridx https github com oria gridx wiki Create the Simplest Gri
  • SVG animateTransform 平移和缩放同时失败

    我有一条想要使用的动画路径animateTransform 我想同时平移和缩放路径 这不起作用 显然只有第二个动画起作用 在这种情况下scale 我究竟做错了什么 svg width 300px border 1px solid fill
  • 在ubuntu Linux服务器上通过命令行运行php文件

    我试图在 ubuntu Linux 服务器上运行 php 文件 但当我运行 php file name php 时出现 找不到命令 错误 在网上搜索时 我发现一篇文章建议我运行 sudo aptitude install php5 cli
  • InterfaceBuilder NSButton 连接到 NSViewController 原因“无法连接操作,目标类 NSObject 不响应”

    我有一个基于视图的NSTableView其 文件的所有者 是ViewController 我在自定义上拖动了一个按钮 用于删除 NSTableCellView 所以我想单击按钮并从 tableView 中删除当前行 但是当添加行时调试控制台
  • 隐藏用于 editText 焦点/触摸的软键盘

    我试图隐藏软键盘 使其在 EditText 接收焦点或触摸事件时不显示 我希望 EditText 是可编辑的 EditText 中会有文本 因此我希望 EditText 响应触摸事件 以便定位光标 但我将有专用的编辑按钮 而不是使用软键盘
  • 使用 Jasmine 测试时,Angularjs 注入控制器为空

    我目前正在与Angular 以及使用 Karma 和 Jasmine进行测试 例如 过滤器被注入到主模块中 并且可以毫无问题地进行测试 但是当我尝试测试控制器时 我得到了一个空物体注射后 这是我的主模块的代码 function use st
  • 具有固定滚动行和固定滚动列的大型动态大小 html 表格

    我需要在网页上显示一个大表格 并且需要防止第一列和第一行滚动 我想动态设置此表的垂直大小 在某些静态大小的页眉 页脚页面内容之间 以使其尽可能高 而不强制浏览器窗口具有垂直滚动条 browser window fixed static we
  • SwiftUI 安排本地通知没有按钮?

    这可能有一个非常简单的答案 因为我对 Swift 和 SwiftUI 还很陌生 并且刚刚开始学习 我正在尝试安排每天在特定时间重复的本地通知 但仅在选择切换时才执行此操作 因此 如果变量为真 我希望安排该通知 我在网上看了一些教程 比如这个
  • POST 字典为 JSON

    我需要将字典中的一些字段 来自 VB Net 应用程序 以 JSON 格式发送到 Web 服务 下面是代码 Dim dict As New Dictionary Of String String dict Add Drinks 2 dict
  • Fortran 中是否可以将零值变量输出为空白?

    我想在格式化文件中输出实际变量 如果变量非零 则使用格式语句 但如果变量为零 则仅输出空格 类似于 Iw 0 的做法 是否可以在格式语句中执行此操作 谢谢 不 不是使用格式语句 但是通过将值写入字符串并进行处理 这相当容易做到 下面是一个演
  • 如何制作一个极其广泛的情节

    我有一个包含 10000 个观察值的长时间序列 我想将其可视化 问题是 如果我只是正常地绘制它 时间维度将被压缩 并且我想要可视化的时间序列的任何细节都不会明显 例如 plot sin 1 10000 100 rnorm 10000 5 t
  • 具有私有 IP 的 Kubernetes 入口控制器

    是否可以在没有公共 IP 地址的情况下部署入口控制器 nginx Thanks 是否可以在没有公共 IP 地址的情况下部署入口控制器 nginx 毫无疑问 是的 如果 Ingress 控制器的Service is of type NodeP
  • 如何显示 url 中的图像?

    我有一个字符串变量tmpImgURLStr其中包含类似的 URLwww abc com img png 我想在我的 imageView 中显示该图像 因为我使用了一些代码 但它不起作用 如下所示 NSLog Img URL tmpImgUR
  • C++:按值将对象传递给同一类的成员函数

    我是 C 的初学者 刚刚开始学习 OOP 在下面的程序中 我添加了相同类的对象并显示了结果 但是 我无法理解这样一个事实 如果我按值将对象传递给函数 那么更改如何反映在调用函数中 这addNumbers 函数需要 Complex 类的两个对