我需要在Crop of Class类中创建一个实例,我无法找到一种方法来实现这项工作。希望你们能帮上忙。
这是我的主要地方,我将一个对象发送到类作物。
int main(){
char select = 'a';
int plant_num = 2;
int crop_num = 0;
Crop crop[10];
Plant plant[20];
plant[0] = Plant("Carrots",'c');
plant[1] = Plant("Lettuce",'l');
plant[2] = Plant("Rosemary",'r');
crop[0] = Crop(plant[0],4,2);
crop_num++;
cout << "Garden Designer" << endl;
cout << "===============";
}
类作物是我想要植物类实例的地方
class Crop {
private:
int g_length;
int w_width;
Plant PlantType;
public:
Crop();
Crop(const Plant&, int, int);
};
我想要类作物实例的类植物
class Plant {
private:
char plant[20];
char p_symbol;
public:
Plant();
Plant(const char* n, char s);
};
Crop.cpp
#include <iostream>
#include <iomanip>
#include <cstring>
#include <new>
#include "crop.h"
using namespace std;
Crop::Crop(){
}
Crop::Crop(const Plant& temp, int l, int w){
}
抱歉,如果我遗失了什么。真的很困惑,如果你需要Plant.cpp文件内容只是问我。我认为不需要该文件。
答案 0 :(得分:6)
有一个名为Member initializer list的东西,它的位置在其参数列表之后的构造函数定义中,前面是分号,后跟构造函数的主体。因此,要初始化成员,您可以编写
Crop::Crop(const Plant& temp, int l, int w) :
g_length(l),
w_width(w),
PlantType(temp)
{ }
这样做是为了调用成员的适当构造函数。他们不必是复制构造者。您可以显式调用默认值或其他任何值,但在您的情况下可能没有多大意义。
这是因为在执行构造函数体之前实例化成员。你不会遇到int
的问题,因为它们可以在体内设置。但是,参考文献必须始终有效,因此身体内部没有任何内容可以使用&#34; null-reference&#34;。
你可以这样做:
Crop::Crop(const Plant& temp, int l, int w) : PlantType(temp)
{
g_length = l;
w_width = w;
}
但是未明确初始化的任何成员都会使用默认构造函数进行初始化,因此//here
g_lenght
存在并且具有值(0或垃圾,如果默认值为零,则不记得,我认为它是捶打的,然后在身体operator=
被召唤。在第一种情况下,通过复制构造函数创建对象。
通常这不是一个很大的区别,但对于更复杂的类型,它可能很重要。特别是如果构造一个空对象需要很长时间,那么赋值也很复杂。它只是为了更好地设置对象一次,而不是创建它并使用operator=
重置。
出于某种原因,我个人喜欢第二种情况,但这被认为是一种更糟糕的做法,因为逻辑上这些成员是从一开始就使用某些值构建的。
答案 1 :(得分:1)
你在这里走上正轨:
crop[0] = Crop(plant[0],4,2);
这将使用正确的参数调用类Crop
的构造函数。这个构造函数应该用这些值初始化相应的数据成员,但实际采用这些参数的构造函数什么都不做:
Crop::Crop(const Plant& temp, int l, int w) {
// ...
}
使用成员初始值设定项列表初始化您的数据成员:
Crop::Crop(const Plant& temp, int l, int w)
: g_length(l), g_width(w), PlantType(temp)
{ }
我们需要构建器主体,直到 我们已经初始化了我们的数据成员之后
。答案 2 :(得分:0)
您的Crop构造函数接收Plant(和两个整数)并完全忽略它们。尝试:
Crop::Crop(const Plant& temp, int l, int w) :
g_length(l), w_width(w), PlantType(temp) {}