一、概述

类是一种用户自定义的类型,声明一个类对象时,编译程序要为对象分配存储空间,进行必要的初始化。在C++中,这项工作是由构造函数来完成的。

大部分对象在使用之前没有正确的初始化是C++出错的主要原因。
引入类的构造函数是正确的初始化类的对象,使该对象具有区别于其他对象的特征。
    一般什么时候触发并调用类的构造函数呢?
    答案是:当我们用类来定义一个类变量的时候,如下:
(1)当我们用类去建立一个对象时,它首先调用类的构造函数

class demo{.....}; 声明并定义好完整的类

(2)调用类的无参数的构造函数

demo d;

(3)按参数个数不同,调用类中不同的构造函数

demo d1(参数1,..)

二、定义

构造函数名和类名完全一样,可以根据不同的参数来实现重载不同的构造函数;

构造函数是没有任何返回值的,它默认的是public,inline函数;

构造函数可以重载,可以是无参数,有参数,有默认参数)如下:

声明三个构造函数

代码如下

class item{

public:

item(std::string& book=\"\" ); //带默认形参的构造函数

item(std::string& ); //带形参的构造函数

item(); //无形参的构造函数

};

三、构造函数初始化成员变量的方法

如下面的类

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;
}

四、初始化方式的选择

无参数的构造函数:主要用初始化列表来初始化成员变量
有参数的构造函数:默认形参+初始化列表的构造函数

由于忙着C++等级考试,还没有仔细的考虑这个函数与以前所学函数的区别,和为什么C++要设构造函数,只是大概看了下基础,待考完试可以认真研究一下这门语言。

C++类构造函数的更多相关文章

  1. C++中虚继承派生类构造函数的正确写法

    最近工作中某个软件功能出现了退化,追查下来发现是一个类的成员变量没有被正确的初始化.这个问题与C++存在虚继承的情况下派生类构造函数的写法有关.在此说明一下错误发生的原因,希望对更多的人有帮助. 我们 ...

  2. WorldWind源码剖析系列:BMNG类构造函数深入分析

    BMNG构造函数深入分析 一.主要类图 二.主要功能: 1)        BMNG类 BMNG类将包含以“Blue Marble”为主题的所有可渲染影像的根节点添加到当前星球的可渲染对象列表中,包括 ...

  3. C#中派生类调用基类构造函数用法分析

    这里的默认构造函数是指在没有编写构造函数的情况下系统默认的无参构造函数 1.当基类中没有自己编写构造函数时,派生类默认的调用基类的默认构造函数例如: ? 1 2 3 4 5 6 7 8 9 10 11 ...

  4. 转 关于C#中派生类调用基类构造函数的理解

    关于C#中派生类调用基类构造函数的理解 .c#class       本文中的默认构造函数是指在没有编写构造函数的情况下系统默认的无参构造函数 1.  当基类中没有自己编写构造函数时,派生类默认的调用 ...

  5. C++类构造函数初始化列表

    C++类构造函数初始化列表 构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式.例如: class CExample {public:     ...

  6. C# 类构造函数赋值里属性与字段赋值注意项

    public class Test { public Test(int age) { this.Age=age;//如果这里使用的是this.age=age;那么属性里的判断将不会执行 } priva ...

  7. C++类构造函数初始化列表(转)

    构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式.例如: { public:     int a;     float b;     //构 ...

  8. C++ 派生类构造函数和析构函数

    几个问题 一个类的各数据成员的构造顺序? 按他们在类定义中出现的先后顺序:先定义者先构造. 类的对象成员的构造函数与类自身的构造函数的执行顺序? 先执行对象成员的构造函数,再执行类自身的构造函数. 构 ...

  9. C++类构造函数、析构函数运行机理

    http://blog.sina.com.cn/s/blog_6fd68d5f0100n60h.html 前言--构造函数.析构函数的简单理解:1)构造函数---对象被创建时候调用的函数:2)析构函数 ...

  10. C++语言笔记系列之十三——派生类构造函数的调用

    1.派生类构造函数的调用 (1)一个基类的全部数据成员均被派生类继承.创建一个派生类对象时.系统在为派生类对象分配单元时一定要为其基类数据成员分配子空间. (2)一个派生类对象在创建时不仅要调用派生类 ...

随机推荐

  1. c# 委托delegate 编写计算器

    .Net 中的委托类似于 C 或 C++ 中的函数指针.使用委托使程序员可以将方法引用封装在委托对象内.然后可以将该委托对象传递给可调用所引用方法的代码,而不必在编译时知道将调用哪个方法.与 C 或 ...

  2. CSS彻底研究(3) - 浮动,定位

    Github pages 博文 CSS彻底研究(3)-浮动,定位 一 . 浮动float I . 定义及规则 float默认为none,对应标准流的情况.当float : left;时,元素就会向其父 ...

  3. Android-------设置TextView同时显示图片和文本,并控制图片大小

    //获取资源图片     Drawable leftDrawable = getResources().getDrawable(R.drawable.comment_parise);     //设置 ...

  4. hdu1175连连看

    Problem Description “连连看”相信很多人都玩过.没玩过也没关系,下面我给大家介绍一下游戏规则:在一个棋盘中,放了很多的棋子.如果某两个相同的棋子,可以通过一条线连起来(这条线不能经 ...

  5. Unity-资源

    模型.材质.动画 Unity的默认系统单位为"米" 三维软件 三维软件内部米制尺寸/m 默认设置导入Unity中的尺寸/m 与Unity单位的比例关系 Maya 1 100 1:1 ...

  6. MVC(Model View Controller)框架

    MVC框架 同义词 MVC一般指MVC框架 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一 ...

  7. css3 页面退出和进入的动画

    @-webkit-keyframes slideIn { from { -webkit-transform: translate3d(100%,0,0); transform: translate3d ...

  8. 浅谈window.attachEvent

    以前写 JavaScript 脚本时,事件都是采用object.event = handler;的方式初始化.这种方式对于 Internet Explorer.Mozilla/Firefox 和 Op ...

  9. tuple只有一个元素的时候,必须要加逗号

    In [1]: a = (1) In [2]: a Out[2]: 1 In [3]: a = (1,) In [4]: a Out[4]: (1,) 这是因为括号()既可以表示tuple,又可以表示 ...

  10. 连接oracle数据库出现:ORA-12505,TNS:listener does not currently know of SID given in connect descriptor

    Java使用 jdbc:oracle:thin:@11.1.0.14:1521:orcl 连接oracle数据库出现: ORA-12505,TNS:listener does not currentl ...