如何在 C++ 中创建包含子 class 的 class 的链表?
How can I create a linked list of a class that contains child classes in C++?
例如,在下面的简单示例中,我如何创建一个"Child"的实例,将信息存储在"Parent"中,并继续"Group"链表到下一个节点?
完整代码:https://ideone.com/v7dohX
添加 "Child" 的示例函数:
void Group::addChild() // Adding an instance of a child class.
{
Parent *now = bottom, *temp;
string name = "Jason", gender = "male";
int age = 21;
temp == new Child(name, age, gender);
if (count == 0)
{
top = bottom = temp;
temp->setNext(NULL); // Segmentation fault?
count++;
}
}
示例类:
class Parent // Holds the info for each node.
{
private:
string name;
int age;
string gender; // Will be specified in child class.
Parent *next;
public:
Parent(string newname, int newage)
{
name = newname;
age = newage;
}
void setGender(string myGender) { gender = myGender; }
void setNext(Parent *n) { next = n; }
};
class Child : public Parent // Create instances to store name, age, and gender.
{
public:
Child(string newname, int newage, string newgender) : Parent(newname, newage)
{
setGender(newgender);
}
};
class Group // Linked list containing all Parent/Child.
{
private:
int count;
Parent *top;
Parent *bottom;
public:
Group()
{
count = 0;
top = bottom = NULL;
}
void addChild(); // Defined in the function listed at the top of this post.
};
当我 运行 我的代码时,出现分段错误。我怎样才能完成这个简单的任务?
这段代码中有几个重要的缺陷。
正如 Joachim 评论的那样,您没有分配温度,而是进行了比较。
应该是:
temp = new Child(姓名、年龄、性别);
而且,您的 Parent 构造函数接下来应该进行初始化。
也学习初始化列表语法。这是一个可能的父构造函数
Parent(string newname, int newage, Parent* n = NULL)
:名字(新名字),年龄(新名字),下一个(n)
{
}
你不马上设置,那是自找麻烦。如果你忘记了 setNext()
(现在你只在列表为空时这样做)然后你有一个悬空指针。 next指针会指向内存中的一个随机位置,不为null,你去那里会崩溃
例如,在下面的简单示例中,我如何创建一个"Child"的实例,将信息存储在"Parent"中,并继续"Group"链表到下一个节点?
完整代码:https://ideone.com/v7dohX
添加 "Child" 的示例函数:
void Group::addChild() // Adding an instance of a child class.
{
Parent *now = bottom, *temp;
string name = "Jason", gender = "male";
int age = 21;
temp == new Child(name, age, gender);
if (count == 0)
{
top = bottom = temp;
temp->setNext(NULL); // Segmentation fault?
count++;
}
}
示例类:
class Parent // Holds the info for each node.
{
private:
string name;
int age;
string gender; // Will be specified in child class.
Parent *next;
public:
Parent(string newname, int newage)
{
name = newname;
age = newage;
}
void setGender(string myGender) { gender = myGender; }
void setNext(Parent *n) { next = n; }
};
class Child : public Parent // Create instances to store name, age, and gender.
{
public:
Child(string newname, int newage, string newgender) : Parent(newname, newage)
{
setGender(newgender);
}
};
class Group // Linked list containing all Parent/Child.
{
private:
int count;
Parent *top;
Parent *bottom;
public:
Group()
{
count = 0;
top = bottom = NULL;
}
void addChild(); // Defined in the function listed at the top of this post.
};
当我 运行 我的代码时,出现分段错误。我怎样才能完成这个简单的任务?
这段代码中有几个重要的缺陷。 正如 Joachim 评论的那样,您没有分配温度,而是进行了比较。
应该是:
temp = new Child(姓名、年龄、性别);
而且,您的 Parent 构造函数接下来应该进行初始化。 也学习初始化列表语法。这是一个可能的父构造函数
Parent(string newname, int newage, Parent* n = NULL) :名字(新名字),年龄(新名字),下一个(n) { }
你不马上设置,那是自找麻烦。如果你忘记了 setNext() (现在你只在列表为空时这样做)然后你有一个悬空指针。 next指针会指向内存中的一个随机位置,不为null,你去那里会崩溃