gpt4 book ai didi

c++ - 如何使用带参数的构造函数创建对象

转载 作者:行者123 更新时间:2023-11-28 00:15:38 24 4
gpt4 key购买 nike

出于某种原因,每当我尝试运行我的代码时,它总是调用默认构造函数,但它应该调用带参数的构造函数。

#include "pokemon.h"

int main()
{
int choice;

cout<<"input 1 2 or 3"<<endl;
cin>>choice;

if(choice==1||choice==2||choice==3)
{
pokemon(choice);
}

}

在我的头文件中有

#include <iostream>
#include <string>
#include <stdlib.h>
#include <time.h>

using namespace std;

class pokemon{
public:
pokemon();//default constructor
pokemon(int a);
~pokemon();//desconstructor
pokemon(const pokemon& c);
void train();
void feed();
bool isnothappy();
string getName();//accessor for the name
int getPowerlevel();//accessor for the power level
string getColor();//accessor for the color
string getType();//accessor
int getHappylevel();//accessor
static int getNumObjects();
void set_type(string);//mutator
void set_color(string);//mutator
void set_power_level(int);//mutator
void set_happy_level(int);//mutator
void set_name(string);//mutator
private:
string name;
string color;
string type;
int power_level;
int happy_level;
static int numberobject;
};

在我的其他 .cpp 文件中有

int pokemon::numberobject=0;//initialize static member variable

pokemon::pokemon(){//default constructor
name="pikachu";
color="yellow";
type="electric";
power_level=0;
happy_level=1;

cout<<"The default constructor is being called"<<endl;
++numberobject;
}

pokemon::pokemon(int a)
{

if(a==0)
{
name="Pikachu";
color="yellow";
type="electric";
power_level=1;
happy_level=1;
}


else if(a==1)
{
name="Bulbasaur";
color="green";
type="grass";
power_level=1;
happy_level=1;
}


else if(a==2)
{
name="Charmander";
color="red";
type="fire";
power_level=1;
happy_level=1;
}

else if(a==3)
{
name="Squritle";
color="blue";
type="water";
power_level=1;
happy_level=1;
}

cout<<"Congratulations you have chosen "<<getName()<<". This " <<getColor()<<" "<<getType()<<" pokemon is really quite energetic!"<<endl;
++numberobject;
}

pokemon::~pokemon()
{
//cout<<"the destructor is now being called"<<endl;
//cout<<"the number of objects before the destructor is "<<pokemon::getNumObjects()<<endl;
--numberobject;
cout<<"Now you have a total number of "<<pokemon::getNumObjects()<<endl;
}

pokemon::pokemon(const pokemon& c)//copy constructor
{
name=c.name;
color=c.color;
type=c.type;
power_level=c.power_level;
happy_level=c.happy_level;
++numberobject;
}

我在我的其他文件中声明和定义了我的构造函数,但是这个该死的东西总是调用默认构造函数

最佳答案

这段代码:

pokemon(choice); 

与以下含义相同:

pokemon choice;

它声明了一个名为 choice 的变量,类型为 pokemon,并且没有给构造函数任何参数。 (您可以在某些地方的声明中放置额外的括号)。


如果你打算在 choice 是构造函数参数的地方声明一个变量,那么你必须这样写:

pokemon foo(choice);

如果你想用choice作为参数创建一个临时对象(它会立即被销毁),你可以写(pokemon)choice;,或者 pokemon(+choice);,或者从 C++11 开始,pokemon{choice};


声明和非声明之间的歧义问题可能会在任何时候以类型名称开头后跟 ( 的语句出现。规则是,如果声明在语法上是正确的,那么它被视为声明。有关其他此类情况,请参见

关于c++ - 如何使用带参数的构造函数创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30517683/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com