构造函数
构造函数是特殊的成员函数;
创建类类型的新对象,系统会自动调用构造函数;
构造函数是为了保证对象的每个数据成员都被正确初始化;
函数名和类名完全相同;
不能定义构造函数的类型(返回类型),也不能使用void
通常情况下构造函数应该声明为公有函数,否则他不能像其他成员函数那样被显式地调用;
构造函数被声明为私有有特殊的用途
#include <iostream>
class Test
{
public:
Test();
private:
int m_nNum;
}
//不带参数的构造函数为默认构造函数
//如果类不提供任何一个构造函数系统将为我们提供一个不带参数的构造函数
Test::Test()
{
m_nNum= 0;
count<<"Initializing Default"<<endl;
}
int main(void)
{
Test t;
return 0;
}
构造函数可以有任意类型和任意个数的参数,一个类可以有多个构造函数(重载)
默认构造函数
不带参数的构造函数
如果程序中未声明,则系统自动产出一个默认构造函数;
#include <iostream>
class Test
{
public:
Test(int num);
void Display();
private:
int m_nNum;
}
//没有定义默认构造函数不能够直接定义类变量
Test::Test(int num)
{
m_nNum= 0;
count<<"Initializing Default"<<endl;
}
int main(void)
{
Test t(10);
t.Display();
return 0;
}
构造函数和new运算符 析构函数和delete函数
#include <iostream>
class Test
{
public:
Test(int num);
~Test(); //析构函数只有默认析构函数一般不带参数;
void Display();
private:
int m_nNum;
}
void Test::Display()
{
count<<"Display Num"<< m_nNum<<endl;
}
//没有定义默认构造函数不能够直接定义类变量
Test::Test(int num)
{
m_nNum= num;
count<<"Initializing Default"<<endl;
}
//没有定义默认构造函数不能够直接定义类变量
Test::~Test()
{
count<<"Destroy "<< m_nNum<<endl;
}
int main(void)
{
Test t1; //栈内存 先析构后构建的,后析构先构建的;
Test t2;
Test *t = new Test(2); //调用构造函数 //堆内存 手动析构
t->Display();
delete t; //调用析构函数
return 0;
}
全局对象的构造先于Main函数
析构函数可以显式调用