访问存储在对象c++中的值
Accessing values stored in object c++
我正在创建对象的一个新实例,然后将虚拟函数的每个实例存储到一个数组中。
问题是,一旦我创建了每个对象,我就无法获得它的值,
需要明确的是,我只希望我创建的每个floors
实例在调用时返回值int。当我的虚拟函数build(int a)
返回int
时
当前输出为
We are adding a spot to value 0 in our array
我还需要将该值添加到此output
因此,根据我当前的示例,它应该显示值5
我认为这应该是因为myBuilding.add(new floors(5));
复合体.h
class complex {
protected:
int num;
public:
virtual void build(int a) {
num = a;
}
};
main.cpp
#include "floors.h"
int main() {
building myBuilding;
myBuilding.add(new floors(5));
myBuilding.build();
return 0;
}
楼层.h
class floors : public complex {
private:
int quantity;
public:
floors(const int& init_quant) :
quantity(init_quant)
{
}
int build(floors()) {
std::cout << "This is the floors class" << quantity << 'n';
return quantity;
}
};
这是处理数组的类,建筑.h
class building {
public:
static const int max_materials = 100;
complex* materials[max_materials];
int num_materials;
public:
building() : num_materials(0) {}
~building() {
for(int i = 0; i < num_materials; ++i) { delete materials[i]; }
}
bool add(complex* s) {
if(num_materials >= max_materials) { return false; }
materials[num_materials++] = s;
return true;
}
void build() {
for(int i = 0; i < num_materials; ++i) { materials[i]->build(i);
std::cout << "We are adding a spot to value " << i << " in our array" << 'n';
}
}
};
在这个时候,我的C++变得生疏了,因为我在它中专业编程已经快两年了。我会像其他人一样回答,但可能会给出一个更好/更正确的答案。
-
你看到的输出是因为这一行:
std::cout << "We are adding a spot to value " << i << " in our array" << 'n';
这一行的意思是打印
i
的值,而不是在调用build
时楼层对象中包含的值。 -
您在该循环的第一次迭代中调用
build(0)
。这将调用返回类型为void
的基类complex
类中的build
函数。由于floors
是complex
的子代,并且方法build
的最匹配的方法签名是取int并返回void的方法签名。因此,在您的示例中,您创建了一个floors
对象,其quantity
为5,但当您调用build
方法时,实际上是在调用基类build
,该基类将num
设置为值0。您将无法从building
类访问num
值,因为它被标记为protected
。 -
由于我有点生疏,而且我还没有尝试过它,我无法告诉你
floors
类中build
方法的签名实际上是什么,但我可以向你保证,它不是你想象的那样。我很困惑你到底想要它是什么。你真的想让它取一个不同的floor
对象吗。它的使用方式我希望这是你正在寻找的签名。int build() { std::cout << "This is the floors class" << quantity << 'n'; return quantity; }
为了获得我认为您正在寻找的输出,您需要更改building
类中的build
方法,使其看起来像这样(注意,您还必须更改floor类中的构建方法,以匹配我在第3点中列出的方法):
void build() {
for(int i = 0; i < num_materials; ++i) {
int quantity = materials[i]->build();
std::cout << "We are adding a spot to value " << quantity << " in our array" << 'n';
}
}
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 代理对象的常量正确性
- 提升 ASIO 无法识别计时器对象
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 如何返回一个类的两个对象相加的结果
- 使用std::函数映射对象方法
- 是否需要删除包含对象的"pair"?
- 如何在自删除后将对象设置为nullptr
- 迭代时从向量和内存中删除对象
- 构造对象的歧义
- 使用"std::unordereded_map"映射到"std::list"对象