新疆软件开发

本站首页 软件开发 成功案例 公司新闻 公司简介 客服中心 软件技术 网站建设
  您现在的位置: 新疆二域软件开发公司 >> 开发语言 >> 文章正文

C++类构造函数学习

       大部分对象在使用之前没有正确的初始化是C++出错的主要领域
引入类的构造函数是正确的初始化类的对象
       一般什么时候触发并调用类的构造函数呢?
答案是:当我们用类来定义一个类变量的时候,
如:
class demo{.....}; 声明并定义好完整的类
//当我们用类去建立一个对象时,它首先调用类的构造函数
demo d;                  //调用类的无参数的构造函数
demo d1(参数1,..)     //按参数个数不同,调用类中不同的构造函数  
2.定义
构造函数名和类名完全一样,可以根据不同的参数来实现重载不同的构造函数
构造函数是没有任何返回值的,它默认的是public,inline函数
2.1定义格式
构造函数可以重载,可以是无参数,有参数,有默认参数)
声明三个构造函数
代码如下
class item{
public:
 item(std::string& book="" ); //带默认形参的构造函数
 item(std::string& ); //带形参的构造函数
 item(); //无形参的构造函数
};
 
2.2构造函数的两种初始化成员变量的方法
如下面的类
class demo(){
public:
 //构造函数在下面添加
private:
 int x;
 int y;
 std::string name;
};
构造函数初始化成员有两种方法
 
A.使用构造函数的初始化列表进行初始化
格式:funname(参数列表):(初始化列表){}
初始化列表: 成员名1(形参名1),成员名2(形参名2),成员名n(形参名n)
代码:
demo(int a=0,int b=0,std::string s=""):x(a),y(b),name(s){}
 
B.使用构造函数的函数体进行初始化
格式:funname(参数列表){函数体内赋值}
它和传统的C函数差不多
代码:
demo(int a=0,int b=0,std::string s=""){
x=a;
y=b;
name=s;
}  
3.基类与派生类
3.1在基类用构造函数初始化类的成员
"默认形参的方式+初始化列表"来初始化基类,而参数顺序不是主要的
代码如下:
class item_base(
public:
 //两个构造函数
 item_base():(isbn(""),price(0.0){}    
 item_base(std::string& book="",double s_price=0.0) //带默认形参
         :isbn(book),price(s_price){}             //初始化列表
......
private:
 std::string book;
 double price
 
);
 
3.2派生类
由于初始化顺序是从基类到派生类的
基类的构造函数负责初始化基类与派生类的构造数负责初始化派生类,
在MFC中N层继承类库中,都是不同层中的类负责初始化自己本身和调用上一级构造函数进行初始化
 
如何在派生类初始化从基类中继承来的protected成员和基类的private成员呢?
答案是:
在派生类的构造函数间接的调用基类构造函数来实现,派生类的初始化列表必须明确指出基类的初始化式
 
作者:未知 | 文章来源:未知 | 更新时间:2008-1-15 16:43:05

  • 上一篇文章:

  • 下一篇文章:

  • 相关文章:
    C++基础知识:结构体数据的指针变量
    如何实现C与C++程序的相互调用
    在C++中成员函数如何实现操作符重载?
    基础学习:C++非成员函数实现操作符重载
    基础学习:C++重载输入输出符
    基础学习:C++重载下标结算符
    基础学习:C++中重载调用操作符
    基础学习:C++重载转换操作符operator (type)
    C++类复制控制学习
    C++类析构函数学习
    软件技术
    · 开发语言
    · Java技术
    · .Net技术
    · 数据库开发
    最新文章  
    ·搜集整理的asp.net的验证方
    ·各种FOR循环结构的整理
    ·软件项目开发中应该考虑那
    ·搜集整理的javascript sel
    ·软件开发中项目经理有那些
    ·学习如何在Lambda表达式进
    ·C++基础知识:结构体数据的
    ·C#实现短信发送程序的例子
    ·sun最近修补了一部分java的
    ·rss定制的另外一种实现方式
    ·delphi实现利用arp欺骗来实
    ·基础学习:基于WF的流程框
    ·网络编程中怎样得知一次数
    ·如何逆序输出单链表?
    ·软件开发过程中的性能设计
    关于我们 | 软件开发 | 下载试用 | 客服中心 | 联系我们 | 友情链接 | 网站地图 | 新疆电子地图 | RSS订阅
    版权所有 © 2016 新疆二域软件开发网 www.k8w.net All Rights Reserved 新ICP备14003571号
    新疆软件开发总机:0991-4842803、4811639.
    客服QQ:596589785 ;地址:新疆乌鲁木齐北京中路华联大厦A-5C 邮编:830000