c++;构造函数行为 我是C++语言的新手,我用java语言做的。 世界中,代码看起来不错,C++中没有。
有人能解释一下为什么调用这两个构造函数吗c++;构造函数行为 我是C++语言的新手,我用java语言做的。 世界中,代码看起来不错,C++中没有。,c++,constructor,C++,Constructor,有人能解释一下为什么调用这两个构造函数吗 class Position { public: Position(void) { std::cout<<"defualt constructor\n"; } Position(unsigned int row,unsigned int col) { std::cout<<"two Arguments constructor\n";
class Position {
public:
Position(void)
{
std::cout<<"defualt constructor\n";
}
Position(unsigned int row,unsigned int col)
{
std::cout<<"two Arguments constructor\n";
row_index = row;
col_index = col;
}
private:
unsigned int row_index;
unsigned int col_index;
};
class Tool
{
public:
Tool(char Team,unsigned int row,unsigned int col)
{
pos = Position(row,col);
team = Team;
}
std::string To_string()
{
std::string str = "team: ";
str+= team;
str+= " pos: ";
str+= pos.To_string();
return str;
}
char Get_team()
{
return team;
}
private:
Position pos;
char team; // A or B
};
int main(void)
{
Tool t = Tool('A',1,3);
return 0;
}
类位置{
公众:
职位(空缺)
{
std::cout在工具
类中,在执行工具
构造函数体之前,首先默认构造位置
对象。然后在工具
构造函数体中创建一个新的临时位置
对象,并使用它来分配给位置
这里的重要部分是对象构造是一个三步过程:
对象已分配
初始化对象并构造其所有成员(此处调用位置
默认构造函数)
执行对象的构造函数(此处调用双参数Position
constructor)
要仅使用两个参数Position
构造函数,而不是简单地分配给pos
对象,您需要使用构造函数初始值设定项列表。通过将工具
构造函数修改为:
Tool(char Team,unsigned int row,unsigned int col)
: pos(row, col), // Initializes the `pos` object
team(Team) // Initialize the `team` member
{
// No code needed, the members have already been initialized
}
在工具
类中,在执行工具
构造函数主体之前,首先默认构造位置
对象。然后在工具
构造函数主体中创建一个新的临时位置
对象,并使用它分配给位置
这里的重要部分是对象构造是一个三步过程:
对象已分配
初始化对象并构造其所有成员(此处调用位置
默认构造函数)
执行对象的构造函数(此处调用双参数Position
constructor)
要仅使用两个参数Position
构造函数,而不是简单地分配给pos
对象,您需要使用构造函数初始值设定项列表。通过将工具
构造函数修改为:
Tool(char Team,unsigned int row,unsigned int col)
: pos(row, col), // Initializes the `pos` object
team(Team) // Initialize the `team` member
{
// No code needed, the members have already been initialized
}
在C++中,所有成员变量都是在构造函数的主体输入之前构造的。代码默认会自动构造一个位置,然后在构造函数的主体中创建另一个位置并将其赋值给先前构造的位置。
您需要使用初始化列表传递位置参数:
Tool(char Team,unsigned int row,unsigned int col) : pos( row, col ), team(Team) {
// constructor now empty
}
通常,构造函数的主体应该是空的。
< P> C++,所有成员变量都是在构造函数的主体输入之前构造的。代码默认会自动构造一个位置,然后在构造函数的主体中创建另一个位置并将其赋值给先前构造的位置。
您需要使用初始化列表传递位置参数:
Tool(char Team,unsigned int row,unsigned int col) : pos( row, col ), team(Team) {
// constructor now empty
}
通常,构造函数的主体应该是空的。当执行进入构造函数主体时,需要构造所属类的成员对象(如果未指定对构造函数的显式调用,则使用默认构造函数)
进入构造函数主体后,pos=Position(row,col)
中的Position(row,col)
;创建一个临时Position
对象,该对象被分配给pos
如果要避免调用成员对象的默认构造函数,在这种情况下,请使用初始值设定项列表中的初始化成员:
Tool(char Team,unsigned int row,unsigned int col)
: pos (row, col), team (Team)
{
}
正如您所期望的,Java中的代码之所以能够正常工作,是因为您总是以值的形式对对象的引用进行操作,而不是对对象进行操作。而Java中未初始化的成员对象引用将默认初始化为null
(如果内存正常),直到您创建一个对象并将其引用分配给一个成员变量。当执行进入构造函数体时,需要构造所属类的成员对象(如果未指定显式调用构造函数,则使用默认构造函数)
进入构造函数主体后,pos=Position(row,col)
中的Position(row,col)
;创建一个临时Position
对象,该对象被分配给pos
如果要避免调用成员对象的默认构造函数,在这种情况下,请使用初始值设定项列表中的初始化成员:
Tool(char Team,unsigned int row,unsigned int col)
: pos (row, col), team (Team)
{
}
正如您所期望的,Java中的代码之所以能够正常工作,是因为您总是以值的形式对对象的引用进行操作,而不是对对象进行操作。而Java中未初始化的成员对象引用将默认初始化为null
(如果内存正常)C++中C++ C++的代码,在C++中,代码是OK的。问题是,你在Java中理解和编写C++代码时使用java作为模型。不要这样做。C++中的代码是可以的。问题是你用java作为理解和编写C++代码的模型。不要这样做。假设它不是。ool'保留'Position'的数组而不是一个对象,并且每个位置都比1大,如果所有元素都要初始化为相同的“值”,如何使用NAMEOFCLASS(参数…):assign(){}@dids的格式来完成然后我建议你使用它,它有一个元素的数量和所有元素的默认值。如果你想要不同的值,那么你不能做它,你必须在构造函数的主体中循环数组,并分配每一个元素。如果我和你一起工作的话,所有的元素都有不同的价值。提到,然后将为每个元素调用两个构造函数(defualt构造函数两个参数构造函数),对吗?它有效吗?它看起来像一个重复的调用。假设“工具”持有“Position”数组而不是一个对象,并且每个位置都比1大,那么如何使用NAMEOFCLASS(参数…)的格式来实现它: