CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  非技术区

关于派生类的构造函数

楼主dalish200(dalish200)2005-11-15 00:22:01 在 C/C++ / 非技术区 提问

#include"iostream"  
  #include"cstring"  
  using   namespace   std;  
  class   person  
  {  
  public:  
  person(int   stu_id,char   *stu_name)  
  {  
  id=stu_id;  
  strcpy(name,stu_name);  
  }  
  void   show()  
  {  
  cout<<"Id:   "<<id<<"     name:     "<<name;  
  }  
  void   set(int   newid,char   *newname)  
  {  
  id=newid;  
  strcpy(name,newname);  
  }  
  private:  
  char   name[20];  
  int   id;  
  };  
  class   student:protected   person  
  {  
  public:  
  student();//应该是这里构造函数出错  
  void   stu_join(char   *newname,int   new_id,int   newgrad_id,int   newpoint)  
  {  
  person::set(new_id,newname);  
  grad_id=new_id;  
  point=newpoint;  
  }  
  void   show()  
  {      
  person::show();  
  cout<<"point:     "<<point<<"     "<<"grad_id:     "<<grad_id;  
  }  
  void   stu_get()  
  {  
  cin>>point>>grad_id;  
  }  
  private:  
  int   point;  
  int   grad_id;  
   
  };  
  void   main()  
  {  
  student   stu1;  
  stu1.stu_join("wangd",1325,200313,100);  
  stu1.show();  
  }  
  /*1.   如果自己不定义构造函数系统会自动生成构造函数,但是在这里我如果不自定义构造函数  
  系统会报错   为什么?    
  2.在下对派生类的构造函数自定义不太明白,哪位大侠能指点迷津感激不尽*/ 问题点数:10、回复次数:6Top

1 楼oosky2004(我要好东西)回复于 2005-11-15 08:57:54 得分 2

第一,student是person的派生,既然person已经定义了构造函数,当然你的student构造的时候就要person的构造。student调用默认的构造函数,person的构造调用失败,所以报错。  
  第二,还是看看书。Top

2 楼dalish200(dalish200)回复于 2005-11-15 12:04:53 得分 0

第一,student是person的派生,既然person已经定义了构造函数,当然你的student构造的时候就要person的构造。student调用默认的构造函数,person的构造调用失败,所以报错。  
  -----------------------------------------------------------------------------------  
  谢谢oosky2004(oosky)兄的指点!  
  但是应该不关基类的事吧,派生类怎么能对基类有所要求,再说新类是不会继承基类的构造函数和析构函数的.而且我试了一下即使基类也用默认的构造函数也只能通过编译不能通过连接Top

3 楼fflush(stdin)回复于 2005-11-15 12:35:29 得分 5

1.   如果自己不定义构造函数系统会自动生成构造函数,但是在这里我如果不自定义构造函数  
  系统会报错   为什么?  
   
  首先不说继承的问题,如果你定义了一个类,但是没有显式定义构造函数,会出现如下的情况:  
  (1)类成员都是内置类型,如int,   char等,编译器什么都不做,类成员处于未初始化状态  
  (2)类成员有其他的类对象,并且该类对象有一个不需要参数的构造函数(默认构造函数),编译器为你的类自动构造一个构造函数,在里面他会调用类对象的构造函数,你的类里面含有一个string对象就是这样的例子  
  (3)类成员有其他的类对象,但是该类对象没有不含参数的构造函数,此时编译器将报错,因为这个类对象无法正确的构造  
  在回答你的问题之前,说明一下,如果你不为一个类写构造函数(如果通过编译的话),那么可以认为它有一个默认的构造函数(说法不太准确,此时编译器不一定会自动生成),但如果你写了一个带参数的构造函数(必须提供参数,那些有参数,但都有默认值的不算),同时没有提供一个不要参数的版本,你的类就没有默认的构造函数。  
  最后指出,继承的情况和上面提到的组合的情况一样,自己好好想想就知道你为什么错了Top

4 楼wohow()回复于 2005-11-15 13:35:33 得分 2

楼主的错误在于说明了student的构造函数但是没有定义。在main()中  
  student   stu1;  
  需要调用student::student(),在类中有声明,所以编译通过,但是没有student::student()函数的定义,所以链接时出错。Top

5 楼whatsouta(某疯子)回复于 2005-11-15 14:02:11 得分 1

同意楼上Top

6 楼dalish200(dalish200)回复于 2005-11-15 22:41:24 得分 0

谢谢各位在下知道错在哪里了Top

相关问题

  • 派生类的拷贝构造函数
  • 派生类的拷贝构造函数问题。
  • 有关派生类构造函数的一个问题
  • 派生类中构造函数的问题,在线等
  • 派生类构造函数问题--sos sos sos
  • 在派生类的构造函数后面可以调用基类的构造函数吗
  • 派生类对象产生时基类构造函数会执行吗?
  • 请问怎么写派生类中的拷贝构造函数呀???????
  • 类的构造函数
  • C++类的构造函数...

关键词

  • 函数
  • 编译器
  • 系统
  • 构造函数
  • 类
  • 构造
  • 派生
  • 报错
  • 调用
  • stu

得分解答快速导航

  • 帖主:dalish200
  • oosky2004
  • fflush
  • wohow
  • whatsouta

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo