gpt4 book ai didi

c++ - c++中如何调用不同类的函数?

转载 作者:行者123 更新时间:2023-11-30 05:27:54 26 4
gpt4 key购买 nike

我有两个类,Apple 和 Banana。我想用函数 callItestA 更改 Banana 类中 iTestA(Apple 类)的值。我尝试使用指针,但它似乎没有用(值没有改变)...

这是我的 Banana.cpp

#include "Banana.h"
#include <iostream>
#include <fstream>

using namespace std;

//Konstruktor
Banana::Banana()
{
cout << "i'm a banana" << endl;
}

//Destruktor
Banana::~Banana()
{
}

//write test
void Banana::writeBanana(){
ofstream myfile;
myfile.open("banana.txt", fstream::in | fstream::out | fstream::app);
myfile << "more bananas\n";
myfile.close();
}

void Banana::callIsetA(Apple a){
//set iTestA in class Apple to 2
a.setItestA(2);
}

和 Apple.cpp

#include "Apple.h"
#include <iostream>
#include <istream>
#include <fstream>

using namespace std;

int itestA = 0;

//Konstruktor
Apple::Apple()
{
cout << "i'm an apple" << endl;
}

//Destruktor
Apple::~Apple()
{
}

//write test
void Apple::writeApple()
{
ofstream myfile;
myfile.open("apple.txt", fstream::in | fstream::out | fstream::app);
myfile << itestA;
//myfile << "more apples\n";
myfile.close();
}

void Apple::setItestA(int i)
{
itestA = i;
}

我希望你能帮助我!

编辑:我的香蕉.h

#ifndef BANANA_H
#define BANANA_H

class Apple;

class Banana
{
public:
Banana();
~Banana();
void writeBanana();
void callIsetA(Apple);
};

#endif

和Apple.h

#ifndef APPLE_H
#define APPLE_H

class Banana;

class Apple
{
public:
Apple();
~Apple();
void writeApple();
void setItestA(int i);
private:
int itestA;
};

#endif

最佳答案

问题是您将 Apple 实例的拷贝传递给函数。所以这段代码改变了复制对象的值。

void Banana::callIsetA(Apple a){ //here is the definition of argument copy, next code will change it but not the object that was passed in to the function as initial argument
//set iTestA in class Apple to 2
a.setItestA(2);
}

要更改原始对象的值,您需要传递其引用。这可能看起来像这样:

void Banana::callIsetA(Apple& a){
//set iTestA in class Apple to 2
a.setItestA(2);
}

关于c++ - c++中如何调用不同类的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37037917/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com