C++的一个作业,挺简单的,目的是让我们了解构造函数,但我写的怎么会有错误

2024-12-25 08:37:24
推荐回答(6个)
回答1:

lz 你的printf() 是你没定义还是你没给出,函数内容是什么,我们都不知道, 无法给你完整的解释。
而且你这样直接使用printf作为函数名相当于重载了系统函数printf,如果该函数没有什么特别意义, 不推荐使用该函数名

关于你的b种的成员变量, 由于你未给成员变量赋值就输出, 给出的结果将会是一个不定值,原因是对C++中的变量,系统是不会自动将其自动初始化为0或者null。

回答2:

代码中问题:
1。包含iostream.但是不能直接使用cout等,你需要说明名称空间,加上using namespace std;就OK了。
2。printf()函数没有声明。你可以重载此函数,输出name和ID,但是建议不要这么做。
3。定义构造函数的时候,应该给数据初始化。如:Student(){name='\0';id=0; cout<<"无参构造函数调用"<包含上面1和2,程序就可以运行了。你可以试一试。
你问的问题:b.printf()在b没有初始化时输出值不确定。

回答3:

#include
#include
using namespace std;
class Student
{
private:
char name[10];
int id;
public:
Student()
{
*name='\0';
cout<<"无参构造被调用"< }
~Student()
{
cout<<"析构函数被调用"< }
Student(char *name, int id);
void SetInfor(char *name,int id);
char *GetName();
int GetID();
void printf();
};
void Student::SetInfor(char *name,int id)
{
strcpy(this->name,name);
this->id=id;
}
Student::Student(char *name, int id)
{
strcpy(this->name,name);
this->id=id;
cout<<"有参函数被调用"<}
int Student::GetID( )
{
return id;
}
char *Student::GetName()
{
return name;
}
void Student::printf() //你这个方法没有实现
{
cout<<"id="<}
int main()
{
Student a("zhangsan", 1001);
a.printf();
Student b;
b.printf();
b.SetInfor("Tracy",01);
b.printf();
return 0;
}

回答4:

你没有写void printf();的定义,仅仅声明了。
你是要输出name和id吧?

没初始化,b的name为空,id为0.

回答5:

你的 Student 类中没有关于 printf()函数的定义,所以无法调用。生成可执行代码的时候会报错,故需在类中添加printf()函数定义。
至于你所说的b没有初始化,输出结果不定,一般定义完之后(Student b;)立刻使用,结果b相应对象的值为0x00,如果在其他地方调用的话,其相应对象的值就不为0x00啦(自己可以测试一下)

回答6:

void printf();
你这句有问题吧,汗,用C的printf作函数名???