gpt4 book ai didi

指向其他类对象的指针的c++ vector 用随机指针归档

转载 作者:搜寻专家 更新时间:2023-10-31 02:05:44 26 4
gpt4 key购买 nike

我有几个具有共同父类的类。子类可能包括其他子类的实例,其中 first_child类有 second_child 的实例类和 second_child类有 third_child 的实例类(class)。这样当你创建 first_child对象实例它还包含second_child的对象实例类,其中还包含 third_child 的对象实例类。
由于我的项目的性质,第一个对象中的所有对象对于来自 Parent_class 的公共(public)参数必须具有相同的值.因此,为了避免硬编码,我添加了指向 parent_class 的指针 vector 。父类中的对象。该 vector 填充了指向对象构造函数中所有子对象的指针,并且设置所需的公共(public)参数是通过循环完成的。简化示例如下所示:

parent.h

class Parent_class{
public:
std::string name = "";
int val = 0;
std::vector<Parent_class *> SUB;

Parent_class();
void setSub();
void printSub();
};

_

parent.cpp
#include "parent.h"

Parent_class::Parent_class() {}

void Parent_class::setSub() {
val = 888;
if(!SUB.empty()){
for(int i=0; i< SUB.size(); i++){
SUB[i]->val = val;
SUB[i]->setSub();
}
}
}

_

first.h
#include "parent.h"
#include "second.h"

class First : public Parent_class{
public:
First();
Second SECOND;
};

_

first.cpp
#include "first.h"
first.cpp
First::First() {
name = "first";
SECOND = Second();
SUB.push_back(&SECOND);
}

_

second.h
#include "parent.h"
#include "third.h"

class Second : public Parent_class {
public:
Second();
Third* THIRD;
};

_

second.cpp
#include "second.h"

Second::Second() {
name = "second";
THIRD = new Third();
SUB.push_back(&THIRD);
}

_

third.h
#include "parent.h"

class Third : public Parent_class{
public:
Third();
};

_

third.cpp
#include "third.h"

Third::Third() {
name = "third";
SUB.clear();
}

当我尝试执行以下操作时,问题出现了:

First f = First();
f.setSub();

SUB vector ff.SECOND尺码1正如他们应该拥有的那样,但是SUB vector f.SECOND.THIRD没有尺码 0 ,但是一些随机的大数字(大如 18446744073709024152 )。
有人可以向我解释为什么会发生这种情况,以及是否可以在不声明 SECOND 的情况下实现这一目标。和 THIRD作为指向对象的指针?我想避免使用指针,因为据我所知,所有子对象( SECONDTHIRD ,...)在第一个实例被销毁时被销毁。

最佳答案

假设 vector 的唯一目的是设置公共(public)参数,那么整个方法就太复杂了,你可以通过虚拟设置函数来实现同样简单得多的方法:

class Parent
{
int _x; // the common parameter...
public:
int x() { return _x; }
virtual void x(int value) { _x = value; }
// ^^^^^^^ (!)
};
class First : public Parent
{
Second _second;
public:
void x(int value) override
// ^^^^^^^^ (!)
{
Parent::x(value);
_second.x(value);
}
};

第二类比...

关于指向其他类对象的指针的c++ vector 用随机指针归档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51396700/

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