【问题标题】:Without accessing structure members how to add values of same type [duplicate]在不访问结构成员的情况下如何添加相同类型的值[重复]
【发布时间】:2021-07-10 08:09:57
【问题描述】:

添加两个相同类型的结构数据并存储finalInstance

#include <iostream>

using namespace std;

typedef struct counter {
    int Stx_cnt;
    int End_cnt;
    int data;
}
counter_t;

class Base {
    public:
        Base() {}
    counter_t firstInstance;
    counter_t secondInstance;

};

int main() {
    Base obj1;
    obj1.firstInstance = {
        1,
        2,
        10
    };
    obj1.secondInstance = {
        3,
        4,
        20
    };
    counter_t finalInstance = obj1.firstInstance + obj1.secondInstance;
    return 0;
}

我在 firstInstance 和 secondInstance 中有一些数据,想添加 then 并存储在 finalInstance 中而不通过他们的成员访问,我的 finalInstance 应该有 {4,6,30};

【问题讨论】:

  • 你的代码在哪里?
  • 请不要使用文字图片,只需复制'n'粘贴到您的问题中。
  • 无论如何,您都可以轻松地为您的类型重载operator+。这方面的基础知识应该在任何 C++ 书籍中,示例遍布互联网。
  • 您是否只是试图允许在结构上使用加号操作而不修改结构 itelt?这将相当简单:只需在命名空间范围之外实现操作。如果您尝试解决您的问题所问的问题,即在不使用成员名称(Stx_cntEnd_cntdata)的情况下实现添加,您可能需要对结构布局做出一些假设。

标签: c++ operator-overloading


【解决方案1】:

C++ 不会自动为自定义数据类型添加加号运算符。这需要您自己完成。

所以,没有办法。您必须访问结构成员。

但这很简单。请在您的 main 函数之前添加这段代码:

counter operator +(const counter& left, const counter& right) {
    counter result{};
    result.Stx_cnt = left.Stx_cnt + right.Stx_cnt;
    result.End_cnt = left.End_cnt + right.End_cnt;
    result.data = left.data + right.data;
    return result;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    • 2020-09-24
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    相关资源
    最近更新 更多