无法更改成员 object 的数据成员值
Can't change data members' values of member object
在这个示例程序中:
- 我用 class B
的 object 成员创建了 class A
- Class B 包含数据成员 x 以及 setter 和 getter
- Class 的构造函数 B 用 值 5[=58= 初始化数据成员 x ]
- ClassA包含成员函数func()设置数据成员x的值 of class B 到值:7
现在x调用func()前后的值不会变成7,有什么问题?
这是我的代码:
Class一个header
#ifndef A_H
#define A_H
#include "B.h"
class A
{
public:
B getB();
void func ();
private:
B obj;
};
#endif // A_H
Class一个实现
#include "A.h"
B A :: getB ()
{
return obj;
}
void A :: func ()
{
getB().setX (7);
}
Class乙header
#ifndef B_H
#define B_H
class B
{
public:
B ();
int getX ();
void setX (int);
private:
int x;
};
#endif // B_H
ClassB实现
#include "B.h"
B :: B () : x(5)
{
}
void B :: setX (int x)
{
this->x = x;
}
int B :: getX()
{
return x;
}
main.cpp
#include <iostream>
#include "A.h"
#include "B.h"
using namespace std;
int main()
{
A instanceA;
cout << instanceA.getB().getX() << "\n";
instanceA.func();
cout << instanceA.getB().getX();
return 0;
}
输出:
5
5
这是 return 按值计算(obj
的副本而不是 obj
本身):
B getB()
{
return obj;
}
对于return变量本身,你应该return一个引用它:
B& getB()
{
return obj;
}
在这个示例程序中:
- 我用 class B 的 object 成员创建了 class A
- Class B 包含数据成员 x 以及 setter 和 getter
- Class 的构造函数 B 用 值 5[=58= 初始化数据成员 x ]
- ClassA包含成员函数func()设置数据成员x的值 of class B 到值:7
现在x调用func()前后的值不会变成7,有什么问题?
这是我的代码:
Class一个header
#ifndef A_H
#define A_H
#include "B.h"
class A
{
public:
B getB();
void func ();
private:
B obj;
};
#endif // A_H
Class一个实现
#include "A.h"
B A :: getB ()
{
return obj;
}
void A :: func ()
{
getB().setX (7);
}
Class乙header
#ifndef B_H
#define B_H
class B
{
public:
B ();
int getX ();
void setX (int);
private:
int x;
};
#endif // B_H
ClassB实现
#include "B.h"
B :: B () : x(5)
{
}
void B :: setX (int x)
{
this->x = x;
}
int B :: getX()
{
return x;
}
main.cpp
#include <iostream>
#include "A.h"
#include "B.h"
using namespace std;
int main()
{
A instanceA;
cout << instanceA.getB().getX() << "\n";
instanceA.func();
cout << instanceA.getB().getX();
return 0;
}
输出:
5
5
这是 return 按值计算(obj
的副本而不是 obj
本身):
B getB()
{
return obj;
}
对于return变量本身,你应该return一个引用它:
B& getB()
{
return obj;
}