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