构造函数中的C++初始化列表
C++ initialization list in constructor
我正在尝试初始化一个名为"酿酒厂"将构造函数中的初始化列表用于另一个名为"的类;列表"问题是,当我把一个酒庄交给酒庄建设者复制时,它没有复制信息。
这是Winery类的头文件:
class Winery
{
public:
Winery(const char * const name,
const char * const location,
const int acres,
const int rating);
virtual ~Winery(void);
const char * const getName() const { return name; }
const char * const getLocation() const { return location; }
const int getAcres() const { return acres; }
const int getRating() const { return rating; }
private:
char *name;
char *location;
int acres;
int rating;
};
这是我的List类的头文件的相关部分:
struct Node
{
Node(const Winery& winery);
Winery item;
Node *nextByName;
Node *nextByRating;
};
这是我的List类中的构造函数:
List::Node::Node(const Winery& winery) :
item(winery.getName(),
winery.getLocation(),
winery.getAcres(),
winery.getRating()),
nextByName(nullptr),
nextByRating(nullptr)
{
}
在我看来,我似乎在做我需要做的一切。我传递给构造函数的酒庄数据成员是私有的,所以我试图通过获取信息的函数来获取它们。他们的秩序井然。
指针在我初始化后工作得很好,但信息不在那里,所以我真的不知道该怎么办。如果你想知道,这是一个任务,我们有使用初始化列表(我尝试过没有它们的情况,但也不起作用,所以我真的不知道该怎么办)。
这是我的酿酒师:
Winery::Winery(const char * const name,
const char * const location,
const int acres,
const int rating) :
acres(acres),
rating(rating)
{
char *newName = new char[sizeof(name) + 1];
char *newLocation = new char[sizeof(location) + 1];
}
从外观上看,这些行:
char *newName = new char[sizeof(name) + 1];
char *newLocation = new char[sizeof(location) + 1];
基本上什么都不做,因为location
和name
字符串没有被分配,甚至没有被写入,这可能是问题的根源。但是,您的acres
和rating
应该已经正确构建。
这是我创建的一个工作版本(也是在Ideone):
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
class Winery
{
public:
Winery(const char * const name, const char * const location, const int acres, const int rating) :
name(strdup(name)),
location(strdup(location)),
acres(acres),
rating(rating)
{
}
virtual ~Winery(void)
{
free(name);
free(location);
}
const char * const getName() const { return name; }
const char * const getLocation() const { return location; }
const int getAcres() const { return acres; }
const int getRating() const { return rating; }
private:
char *name;
char *location;
int acres;
int rating;
};
struct Node
{
Node(const Winery& winery);
Winery item;
};
Node::Node(const Winery& winery) :
item(winery.getName(), winery.getLocation(), winery.getAcres(), winery.getRating())
{
}
int main()
{
Winery winery("Mission Hill Winery", "Kelowna, BC, Canada", 646, 4);
Node node(winery);
printf("%sn", node.item.getName());
printf("%sn", node.item.getLocation());
printf("%in", node.item.getAcres());
printf("%in", node.item.getRating());
}
输出:
Mission Hill Winery
Kelowna, BC, Canada
646
4
相关文章:
- C++类 - 初始化列表 - 递归 - 按值传递
- 在初始化列表之外手动调用基类的构造函数
- C++:带有大括号初始化列表的函数调用表达式 - 标准是否规定在单个元素列表的微不足道的情况下忽略大括号?
- std::map与谓词与初始化列表
- 类内初始化与构造函数初始化列表的顺序
- 当返回语句时,逗号运算符、大括号初始化列表和 std::unique_ptr 组合在一起
- 使用初始化列表填充C++中的多维结构数组时出现问题
- 如何在初始化列表中的构造函数之后初始化变量/对象?
- C++初始化列表与分配值
- C++初始化列表中的向量集大小或调整大小
- 在构造函数初始化列表中使用 std::variant
- emplace_back初始化列表错误,当初始化列表在独立变量上工作时
- 解释了构造函数成员初始化列表
- 使用初始化列表时如何获取私有数据?
- 用初始化列表和超类构造函数声明子类构造函数的正确方式
- 如何在成员初始化列表中声明共享指针
- 庞大的初始化列表,如何修复"fatal error C1060: compiler is out of heap space"
- 我可以检查初始化列表中设置的构造函数主体中的变量吗
- 使用整数初始化列表初始化长双精度的向量
- 是否可以在C++中使用初始化列表设置数组的特定成员?