构造函数
构造函数目的的实现成员的初始化。
构造函数的特点:
无论是用户自定义的构造函数还是默认构造函数都主要有以下特点:
①. 在对象被创建时自动执行;
②. 构造函数的函数名与类名相同
③. 没有返回值类型、也没有返回值;
④. 构造函数不能被显式调用。
构造函数的作用:
构造函数主要用来在创建对象时完成对对象属性的一些初始化等操作, 当创建
对象时, 对象会自动调用它的构造函数。一般来说, 构造函数有以下三个方面
的作用:
■ 给创建的对象建立一个标识符;
■ 为对象数据成员开辟内存空间;
■ 完成对象数据成员的初始化。
#include <iostream>
using namespace std;
class Test
{
public:
Test()
{
cout << "构造函数" << endl;
}
Test(int _a)
{
a = _a;
cout << "有参构造函数:"<< a << endl;
}
Test(const Test& obj)
{
a = obj.a;
cout <<"拷贝构造函数:"<< a <<endl;
}
~Test()
{
cout << "析构函数" << endl;
}
private:
int a;
};
void play()
{
Test t1;//调用无参构造函数
Test t2(1);//调用有参构造函数
Test t4(2);
Test t3 = t4;//t4初始化t3对象,调用拷贝构造函数
Test t5(t4);//t4初始化t5对象,调用拷贝构造函数
}
void main()
{
play();
system("pause");
}
运行结果:
拷贝构造函数(字符串)
#include <iostream>
using namespace std;
class Name
{
public:
Name(const char* mp)
{
mlen = strlen(mp);
m_p = (char*)malloc(mlen+1);
memset(m_p, 0, mlen+1);
strcpy(m_p,mp);
cout<<"构造函数 m_p: " << m_p <<endl;
}
Name(const Name& obj1)
{
mlen = obj1.mlen;
m_p = (char*)malloc(mlen+1);
memset(m_p, 0, mlen+1);
strcpy(m_p , obj1.m_p);
cout<<"拷贝构造函数 m_p: " << m_p <<endl;
}
~Name()
{
if (m_p != NULL)
{
free(m_p);
m_p = NULL;
mlen = 0;
}
cout<<"析构函数"<<endl;
}
private:
char* m_p;
int mlen;
};
void play()
{
Name n1("aaa");
Name n2 = n1;
}
void main()
{
play();
system("pause");
}
运行结果: