首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 软件时空 > 软件相关 > 关于成员和基类的构造函数
【标  题】:关于成员和基类的构造函数
【关键字】:
【来  源】:http://blog.chinaunix.net/article.php?articleId=46153&blogId=8650

关于成员和基类的构造函数

1。测试代码:

#include

class part{
public:
 part(std::string str){
 // throw std::exception("在part对象的构造函数中抛出了一个异常!");

  std::cerr << "构造一个part类型的对象,name is:"<

 }
 ~part(){
  std::cerr<<"析构一个part类型的对象"<<:endl;
 }
};

class base{
public:
 base(std::string str){
 // throw std::exception("在base对象的构造函数中抛出了一个异常!");

  std::cerr << "构造一个base类型的对象,name is:"<

 }
 ~base(){
  std::cerr<<"析构一个base类型的对象"<<:endl;
 }

part baseP;
};

class derived:public base{
public:
 derived(std::string str):base(str){
  p=part(str);
  throw std::exception("在derived对象的构造函数中抛出了一个异常!");

  std::cerr << "构造一个derived类型的对象,name is :"<

 }
 ~derived(){
  std::cerr<<"析构一个derived类型的对象"<<:endl;
 }
 part p;
};

int main()
{
 try{
 
 derived d("test");
 }
 catch (...) {
 }

 return 0;
}

会报错:

error C2512: 'part' : no appropriate default constructor available

解释:成员的构造函数将在容器类本身的构造函数的体执行之前首先执行,

derived::derived(std::string str):base(str),p(str)

 左大括号

右大括号

如果在体之前没有p(str)的话,会调用默认构造函数,又因为没有合适的默认构造函数,所以会报错。

如果在

derived::derived(std::string str)

 左大括号

p=part(str);

右大括号

则实际上p对象已经存在,是复制赋值,而不是复制构造。

2。派生类的构造函数只能描述它自己的成员和自己的直接基类的初始式,它不能直接去初始化基类的成员。

所以如果写derived::derived(std::string str)

baseP(str)

左大括号

右大括号

是错误的。

汇编(十二)——位操作类指令练习:【上一篇】
关于构造失败如何处理:【下一篇】
【相关文章】
没有相关文章
【随机文章】
  • 故障几例
  • 企业局域网网速减慢的故障解决办法
  • lock 终端
  • 用户自定义皮肤的滚动条控件、源码、示例
  • ORACLE查询中出现“Ora-01791 不是Selected表达式”错误信息的解决办法
  • 使用JavaScript中的OLE Automation
  • Tomcat Server下發布網頁錯誤及解決方法
  • Windows 2000磁盘整理
  • 利用远程注册表加强系统安全(2)
  • 用InstallShield 进行 ASP 软件的打包和自动安装
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.