还是关于构造函数的问题!

ztwz 2004-09-26 04:24:33
#include <iostream>
#include <stdlib.h>

using namespace std;

class student
{
public:
/* student() //这个构造函数是我加上去的,下面fn()里的student s1;就是调用他才对嘛??但是会出错,为什么呀!
{
cout<<"这是默认的嘛"<<endl;
}*/
student(char *pname="no name")/*如果把上面的注释了程序fn()里的student s1;就调用他,但这个函数是用参数的呀,而student s1;是没有参数的嘛。为什么程序会调用这个函数而不是上面的哪个,谢谢!!*/
{
cout<<"create on student\n";
strcpy(name,pname);
num++;
cout<<num<<endl;
}
~student()
{
cout<<"destruct on student\n";
num--;
cout<<num<<endl;
}
static int number()
{
return num;
}

protected:
static int num;
char name[40];
};

int student::num=0;

void fn()
{
student s1;
student s2;
cout<<student::number()<<endl;
}


int main(int argc, char *argv[])
{
fn();
cout<<student::number()<<endl;
system("PAUSE");
return 0;
}
...全文
80 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
cxc014 2004-09-26
  • 打赏
  • 举报
回复
书上都说得很清楚了,你也不来CSDN问了(:
ztwz 2004-09-26
  • 打赏
  • 举报
回复
#include <iostream>
#include <stdlib.h>

using namespace std;

class student
{
public:
student()
{
cout<<"这是默认的嘛"<<endl;
}
student(char *pname)//不给这个参数符值就是用我上面哪个函数了吧!总算明白了,郁闷了一下午,书上怎么不把这点给写清楚呀!
{
cout<<"create on student\n";
strcpy(name,pname);
num++;
cout<<num<<endl;
}
~student()
{
cout<<"destruct on student\n";
num--;
cout<<num<<endl;
}
static int number()
{
return num;
}

protected:
static int num;
char name[40];
};

int student::num=0;

void fn()
{
student s1;
student s2;
cout<<student::number()<<endl;
}


int main(int argc, char *argv[])
{
fn();
cout<<student::number()<<endl;
system("PAUSE");
return 0;
}
seilfer2000 2004-09-26
  • 打赏
  • 举报
回复
是这个问题,当你student()时,编译器就不知道该调用哪个函数了 因为你有参数的有默认值啊
cxc014 2004-09-26
  • 打赏
  • 举报
回复
//这个构造函数是我加上去的,下面fn()里的student s1;就是调用他才对嘛??但是会出错,为什么呀!
--本是该调用它的,但另一个有参的constructor: student(char *pname="no name")带了缺省实参,编译器在解析的时候,由于它的的优先级都是一样的,所以is ambiguous;
这样就不会有问题了student(char *pname)
如果你既是要实现了缺省实参,就表示你在构造的时候希望它有一个默认的值,又何必再加个student()呢,所以这个就没必要了
ztwz 2004-09-26
  • 打赏
  • 举报
回复
可以解释一下吗?
为什么他要调用有参数的,而不调用无参的?
insulator 2004-09-26
  • 打赏
  • 举报
回复
C:\Documents and Settings\yaoxinglong\My Documents\Untitled4.cpp
call of overloaded `student()' is ambiguous

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧