当前位置:  开发笔记 > 编程语言 > 正文

c ++构造函数行为

如何解决《c++构造函数行为》经验,为你挑选了1个好方法。

我是c ++语言的新手,我对java语言很熟悉.

在Java世界中,代码看起来没问题,但在c ++中却没有.

有人可以解释为什么两个构造函数被调用?

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;
}

我打算调用两个参数构造函数

OUTPUT:

defualt构造函数

两个Arguments构造函数



1> Some program..:

Tool类中,Position在执行Tool构造函数体的执行之前,首先默认构造对象.然后创建一个新的临时Position对象中的Tool构造体,并用它来分配pos.

这里的重要部分是对象构建分为三个步骤:

    对象已分配

    初始化对象并构造其所有成员(此处Position调用默认构造函数)

    执行对象的构造函数(这里Position调用双参数构造函数)

要仅使用双参数Position构造函数,而不是简单地分配给pos对象,您需要使用构造函数初始化列表.您可以通过修改Tool构造函数来执行此操作:

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
}

推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有