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

#include<iostream.h>#include<string.h>classStudent{private:charname[10];intid;public:... #include <iostream.h>
#include <string.h>
class Student
{
private:
char name[10];
int id;
public:
Student()
{
cout<<"无参构造被调用"<<endl;
}
~Student()
{
cout<<"析构函数被调用"<<endl;
}
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<<"有参函数被调用"<<endl;
}
int Student::GetID( )
{
return id;
}
char *Student::GetName()
{
return name;
}
void main()
{
Student a("zhangsan", 1001);
a.printf();
Student b;
b.printf();
b.SetInfor("Tracy",01);
b.printf();
}
还有一个问题,b.printf(),b没有初始化,那输出会是什么
展开
 我来答
MrK
2011-10-27 · TA获得超过3305个赞
知道大有可为答主
回答量:1988
采纳率:50%
帮助的人:1864万
展开全部
lz 你的printf() 是你没定义还是你没给出,函数内容是什么,我们都不知道, 无法给你完整的解释。
而且你这样直接使用printf作为函数名相当于重载了系统函数printf,如果该函数没有什么特别意义, 不推荐使用该函数名

关于你的b种的成员变量, 由于你未给成员变量赋值就输出, 给出的结果将会是一个不定值,原因是对C++中的变量,系统是不会自动将其自动初始化为0或者null。
Sievers分析仪
2024-10-13 广告
是的。传统上,对于符合要求的内毒素检测,最终用户必须从标准内毒素库存瓶中构建至少一式两份三点标准曲线;必须有重复的阴性控制;每个样品和PPC必须一式两份。有了Sievers Eclipse内毒素检测仪,这些步骤可以通过使用预嵌入的内毒素标准... 点击进入详情页
本回答由Sievers分析仪提供
liugang585570
2011-10-27 · 超过22用户采纳过TA的回答
知道答主
回答量:76
采纳率:0%
帮助的人:38.7万
展开全部
代码中问题:
1。包含iostream.但是不能直接使用cout等,你需要说明名称空间,加上using namespace std;就OK了。
2。printf()函数没有声明。你可以重载此函数,输出name和ID,但是建议不要这么做。
3。定义构造函数的时候,应该给数据初始化。如:Student(){name='\0';id=0; cout<<"无参构造函数调用"<<endl;}
包含上面1和2,程序就可以运行了。你可以试一试。
你问的问题:b.printf()在b没有初始化时输出值不确定。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
织梦人超
2011-10-27 · 超过13用户采纳过TA的回答
知道答主
回答量:36
采纳率:0%
帮助的人:31.9万
展开全部
#include <iostream>
#include <string.h>
using namespace std;
class Student
{
private:
char name[10];
int id;
public:
Student()
{
*name='\0';
cout<<"无参构造被调用"<<endl;
}
~Student()
{
cout<<"析构函数被调用"<<endl;
}
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<<"有参函数被调用"<<endl;
}
int Student::GetID( )
{
return id;
}
char *Student::GetName()
{
return name;
}
void Student::printf() //你这个方法没有实现
{
cout<<"id="<<id<<",name="<<name<<endl;
}
int main()
{
Student a("zhangsan", 1001);
a.printf();
Student b;
b.printf();
b.SetInfor("Tracy",01);
b.printf();
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友1fc36d4
2011-10-27 · TA获得超过3127个赞
知道大有可为答主
回答量:1497
采纳率:100%
帮助的人:1802万
展开全部
你没有写void printf();的定义,仅仅声明了。
你是要输出name和id吧?

没初始化,b的name为空,id为0.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
冉易云ST
2011-10-27 · TA获得超过535个赞
知道小有建树答主
回答量:397
采纳率:0%
帮助的人:519万
展开全部
你的 Student 类中没有关于 printf()函数的定义,所以无法调用。生成可执行代码的时候会报错,故需在类中添加printf()函数定义。
至于你所说的b没有初始化,输出结果不定,一般定义完之后(Student b;)立刻使用,结果b相应对象的值为0x00,如果在其他地方调用的话,其相应对象的值就不为0x00啦(自己可以测试一下)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
huenkun
2011-10-27 · TA获得超过276个赞
知道答主
回答量:206
采纳率:0%
帮助的人:88.2万
展开全部
void printf();
你这句有问题吧,汗,用C的printf作函数名???
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式