c++之构造函数

20171009更新:添加析构函数的说明和一个例子的完整代码

前言

首先梳理下几个概念:
类和对象!类是具体的,对象是抽象的。
类包含成员函数数据成员
数据成员有普通数据成员,const成员,string等;
成员函数有 对象属性的封装函数,一般功能函数,特殊函数
特殊函数包括了构造函数和析构函数,本文就是介绍一下构造函数

概念和特点

构造函数有什么用呢?我们在初始化函数时,可能会忘记或者多次初始化,构造函数就是来避免这些误操作。
它的特点有:

  • 在对象实例化时自动调用
  • 函数名和类同名
  • 没有返回值
  • 用户没定义构造函数的情况下,编译器自动生成一个

使用

  • 无参的构造函数
class Student
{
private:
    string m_strName;
    int m_iAge;
public:
    Student();
    void setName(string name);
    string getName();
    void setAge(int age);
    int getAge();
};

Student::Student()
{
    m_strName = "sam";
    m_iAge = 23;
}

在实例化对象的时候:

Student t1;//系统会调用上面定义的构造函数
  • 有参数的构造函数
class Student
{
private:
    string m_strName;
    int m_iAge;
public:
    Student(string name , int age);
    void setName(string name);
    string getName();
    void setAge(int age);
    int getAge();
};

Student::Student(string name , int age)
{
    m_strName = name;
    m_iAge = age;
}

在实例化对象的时候:

Student t1("mike", 23);//系统会调用上面定义的构造函数
  • 赋默认值的构造函数

虽然上面定义了参数,可以在声明中赋予默认值,比如:

Student::Student(string name , int age = 23)

这样一来,实例化对象时可以这样:

Student t1("merry")

包含初始化列表的构造函数

初始化列表有以下几个特点:

  • 初始化列表先于构造函数执行
  • 只能用于构造函数
  • 可以同时初始化多个数据成员

看以下例子:

class Student
{
private:
    string m_strName;
    int m_iAge;
public:
    Student(string name , int age);
    void setName(string name);
    string getName();
    void setAge(int age);
    int getAge();
};

Student::Student(string name , int age):
m_strName(name),m_iAge(age)
{}

实例化对象时:

Student t1("susan", 22);

析构函数

析构函数在对象销毁的时候被自动调用;
比如,在类当中定义了指针类型的数据成员,那么在析构函数中,需要对这些指针类型的数据成员做delete处理,即释放内存。

复制构造函数

例子

下面给出一个例子,综合了类的定义,对象的实例化,构造函数,析构函数等概念。
基于visual studio 2013。

链接:http://pan.baidu.com/s/1kVuvK39 密码:qkan

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值