我目前有一个链表类,它可以创建可以存储整数值的Node对象。我想修改我的List类,以便创建的节点能够引用来自不同类的对象指针,而不是简单的整数值。如何声明一个指针,指向一个在不同类中创建的对象呢?
这个链表类可以创建包含int值的节点对象。
我如何得到我的链表类能够存储指针对象?
#ifndef LINK_H
#define LINK_H
class List{
private:
typedef struct Node{
int m_data;
Node *next;
}* node_ptr;
node_ptr cur;
node_ptr temp;
node_ptr head;
public:
List();
void add_node(int);
void del_node(int);
void print();
};
#endif
这是食品班。我正试图让我的链表存储指针到已经从这个类创建的对象。
#ifndef FOOD_H
#define FOOD_H
#include<string>
using namespace std;
class Food{
private:
string m_name;
bool m_meat;
int m_price;
int m_calories;
public:
Food();
Food(string , bool, int , int );
bool is_meat(bool );
void print(ostream &os);
};
#endif
简单的答案是这样做:
class List{
private:
typedef struct Node{
Food* m_data;
Node *next;
}* node_ptr;
node_ptr cur;
node_ptr temp;
node_ptr head;
public:
List();
void add_node(Food*);
void del_node(Food*);
void print();
};
这应该可以工作-你必须包含头文件,在这里声明Food类,或者对Food类进行前向声明。
此代码可以调整,以获得更好的性能,更灵活或更安全。这使用了更多的c++特性。但是考虑这样做:
不要在头文件中使用using namespace std;
或任何其他命名空间名称。这将在你要包含头文件的每个文件中"包含"这个命名空间。这很糟糕,因为它污染了全局命名空间。因此,如果您定义了一个函数int cout () {}
,就会与std::cout发生冲突。这是一个微不足道的例子,但在更大的项目中,这真的很重要。