加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

为什么我的c对象不会影响另一个c对象?

发布时间:2020-12-16 10:34:14 所属栏目:百科 来源:网络整理
导读:我有一个简单的c类,intHolder,它只包含一个int.它也可以添加到int,它可以工作,或者将自己添加到另一个intHolder中包含的另一个int,这不起作用.这与我在 Java中遇到的情况完全不同.这是怎么回事? class intHolder{private: int i;public: intHolder(int myIn
我有一个简单的c类,intHolder,它只包含一个int.它也可以添加到int,它可以工作,或者将自己添加到另一个intHolder中包含的另一个int,这不起作用.这与我在 Java中遇到的情况完全不同.这是怎么回事?

class intHolder{
private:
    int i;
public:
    intHolder(int myInt){i = myInt;}
    void addToInt(int inc){ i = i + inc;}
    void printInt(){cout << i << endl;}
    void addToOtherInt(intHolder other){other.addToInt(i);}
};

主要方法

int main () {
    intHolder ih1(1);
    ih1.printInt();//Should be 1,is 1
    ih1.addToInt(3);
    ih1.printInt();//Should be 4,is 4
    intHolder ih2(2);
    ih2.printInt();//Should be 2,is 2
    ih1.addToOtherInt(ih2);
    ih1.printInt();//Should be 4,is 4
    ih2.printInt();//Should be 6,is 2
};

解决方法

您是按值传递intHolder.这意味着该函数作用于本地副本,因此对调用方没有影响.你需要传递一个参考:

void addToOtherInt(intHolder& other) { other.addToInt(i); }
                            ^

请注意,通常当您拥有包含支持算术运算的其他类型的类型时,您可以提供重载运算符,以便您可以执行以下操作

intHolder a = 5;
intHolder b = 10;
intHolder c = a + b;
c += 42;
a = 42 - b;

等等.有关更多信息,请参见this extensive discussion on operator overloading.

而且,对于“印刷”,习惯上过载ostream& amp;运算符<&lt ;,然后允许您流式传输到各种流,包括但不限于std :: cout.例如:

struct Foo
{
  int i;
};

std::ostream& operator<<(std::ostream& o,const Foo& f)
{
  return o << f.i;
}

可以让你说

Foo f;
std::cout << f;
std::cerr << f;
std::ofstream tmp("foo.txt");
tmp << f;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读