c++单向链表的基础实现。
如何用c++程序风格,设计一条可以存储商品的名称,价格,生产日期这些基础信息的链表。
// 定义商品结构体
struct Product {
string name; // 商品名称
int price; // 商品价格
string date; // 商品生产日期
};
// 定义单向链表节点结构体
struct Node {
Product p; // 存储商品信息的结构体指针
Node* next; // 指向下一个节点的指针
};
// 创建新节点并返回指向该节点的指针
Node* createNode(Product p) {
Node* newNode = new Node();
newNode->p = p;
newNode->next = nullptr;
return newNode;
}
// 在链表尾部添加新节点
void addNode(Node** head, Product p) {
Node* newNode = createNode(p);
Node* current = *head;
Node* last = nullptr;
while (current != nullptr) {
last = current;
current = current->next;
}
last->next = newNode;
}
struct Node
{
Node *next;
char name[100];
float price;
char date[20];
};
不知道你这个问题是否已经解决, 如果还没有解决的话:学习完上文中的六个默认成员函数后,以Date日期类对象为例,我们再总结复习一下他们的特性和用法:
默认成员函数 | 功能 | 常用写法 | 编译器默认生成的 | |
---|---|---|---|---|
构造函数 | 完成成员变量的初始化 | Date (int year, int month , int day) | 对内置类型(基本类型)成员变量不处理,对自定义类型成员变量会去调用它的默认构造函数(不用传参的构造函数)进行初始化。 | |
析构函数 | 完成成员变量的资源清理(delete、free) | ~Date() | 对内置类型成员不处理,因为没有资源需要清理。对自定义类型成员,会调用它的析构函数 | |
拷贝构造函数 | 同类对象定义时的初始化 | Date(const Date& d),参数是本类类型 | 对象按内存存储按字节序完成浅拷贝,对内置类型会完成浅拷贝,而对自定义类型成员会调用他的拷贝构造函数进行拷贝,若是不显示实现,也会进行浅拷贝。 | |
赋值重载函数 | 对已存在的同类对象赋值 | Date& operator=(const Date& d) | 赋值运算符在类中不显式实现时,编译器会生成一份默认的赋值运算符重载,完成对象按字节序的浅拷贝。 | :: 、 .* 、 sizeof 、? : 、. 注意以上5个运算符不能重载。赋值运算符只能重载成成员函数 |
取地址重载操作符函数 | 对不是const修饰的对象取地址 | Date* operator&() | ||
const取地址重载操作符函数 | 对是const修饰的对象取地址 | const Date* operator&()const |
构造和析构的特性是类似的,我们不写编译器会对内置类型不处理,自定义类型会调用它的构造和析构函数处理
拷贝构造和赋值重载特性类似,内置类型会完成浅拷贝,自定义类型会调用他们的拷贝构造和赋值重载
非常抱歉,由于我是一个文本模型,无法运行代码。但是你可以将上述代码复制到一个C++的开发环境中,如Visual Studio或简单的在线编译器(如replit.com),以运行并查看结果。
希望这可以帮助到你!如果你还有其他问题,请随时提问。