在C++中,一般定义一个对象之后,我们最好是能够将其初始化,使他有一个确定的初始状态,这样能避免很多不确定因素,那么在C++中是如何做的呢?
这时候就需要引入构造函数的概念了。
一、所谓构造函数
C++中的类可以定义和类名相同的特殊成员函数,这种函数就叫做构造函数。
注意:定义构造函数的时候可以有参数的,但是定义的构造函数不能有返回值的
但是,但是在构造函数中是可以有return语句的。
举个例子:
#include <iostream>
using namespace std;
class example
{
public:
example(int m)
{
x = y = m;
}
int print_value(void)
{
cout<<"x = "<<x<<" y = "<<y<<endl;
return 0;
}
private:
int x;
int y;
};
int main(int argc,char** argv)
{
example exam1(1);
example exam2 = 2;
exam1.print_value();
exam2.print_value();
return 0;
}
二、构造函数的调用
1.一般情况下C++编译器会自动构造函数
2.特殊情况下需要手动调用构造函数
举例如下:
#include <iostream>
using namespace std;
class example
{
public:
example(int m)
{
x = y = m;
}
int print_value(void)
{
cout<<"x = "<<x<<" y = "<<y<<endl;
return 0;
}
private:
int x;
int y;
};
int main(int argc,char** argv)
{
example exam1(1); //自动调用
example exam2 = 2; //自动调用
example exam3 = example(3); //手动调用
exam1.print_value();
exam2.print_value();
exam3.print_value();
return 0;
}
四、两个特殊的构造函数
1.无参数构造函数
当类中没有定义构造函数时,,编译器默认提供一个无参 编译器默认提供一个无参
构造函数,,并且其函数体为空。
2.拷贝构造函数
当类中没有定义拷贝构造函数时,,编译器默认提供一个 编译器默认提供一个
拷贝构造函数,,简单的进行成员变量的值复制。不进行空间的开辟
一个实例:数组类的创建
main.cpp
#include <iostream>
#include "array.h"
using namespace std;
int main(int argc, char** argv)
{
ARRAY array1(5); //创建对象,并且初始化对象为5个元素
for(int i = 0;i < 5; i ++)
{
array1.Set_Data(i,-i); //给数组赋值
}
for(int i = 0; i < 5; i ++)
{
cout<<"i = "<<array1.Get_Data(i)<<endl; //打印数组的值
}
Destroy(); //释放内存
return 0;
}
array.cpp
#include "array.h"
ARRAY::ARRAY(int length)
{
if(length < 0)
{
length = 0;
}
m_length = length;
m_space = new int[m_length];
}
ARRAY::ARRAY(const ARRAY& obj)
{
m_length = obj.m_length;
m_space = new int[m_length];
for(int i = 0;i < m_length;i ++)
{
m_space[i] = obj.m_space[i];
}
}
int ARRAY::Get_Data(int index)
{
return m_space[index];
}
void ARRAY::Set_Data(int index,int value)
{
m_space[index] = value;
}
int ARRAY::Length()
{
return m_length;
}
void ARRAY::Destroy()
{
m_length = -1;
delete[] m_space;
}
array.h
#ifndef __ARRAY_H_
#define __ARRAY_H_
class ARRAY
{
public:
ARRAY(int length);
ARRAY(const ARRAY& obj);
int Get_Data(int index);
void Set_Data(int index,int value);
int Length();
void Destroy();
private:
int m_length;
int* m_space;
};
#endif