c++构造函数
构造函数的目的就是对数据成员进行初始化,构造函数可以在类内定义也可以在类外定义,在类内定义和定义一般函数的方法基本一致,在类外构造函数需要注意的一点就是构造函数没有返回类型。在使用构造函数的时候需要注意的几点
(1)每建立一个对象,就调用一次构造函数
(2)构造函数没有返回值,因此也没有类型,因此不需要再定义构造函数是声明类型。
(3)构造函数不需要用户调用,也不能被用户调用。
(4)可以用一个类对象初始化另一个类对象。
(5)构造函数的名字必须与类名同名。
下面是带参数的构造函数代码运行示例
以下代码功能均是计算长方体的体积
#include<iostream>
using namespace std;
class box
{
public:
box(int,int,int);
int volume();
private:
int height;
int width;
int length;
};
box::box(int h,int w,int len)
{
height=h;
width=w;
length=len;
}
int box::volume()
{
return(height*width*length);
}
int main()
{
box box1(12,25,30);
cout<<"the volume of box1 is"<<box1.volume()<<endl;
box box2(15,30,21);
cout<<"the volume of box2 is"<<box2.volume()<<endl;
return 0;
}
当然除了以上方法还能用函数初始化表对数据成员进行初始化。下面这段程序是构造函数的重载和用参数初始化表初始数据成员的例子
构造函数重载需要注意的几点
(1)如果在建立对象是选用的无参构造函数应该这样定义BOX box1而不是这样定义 BOX box1();
(2)一个类可以包含多个构造函数,但是对于每一个对象来说,建立对象只执行其中一个构造函数。
附代码
#include<iostream>
using namespace std;
class box
{
public:
box();//定义一个无参构造函数
box(int h,int w,int len):height(h),width(w),length(len){};
//定义一个有参的构造函数,用参数的初始化表对数据成员初始化
int volume();
private:
int height;
int width;
int length;
};
box::box() //在类外定义无参构造函数box
{
height=10;
width=10;
length=10;
}
int box::volume()
{
return (height*width*length);
}
int main()
{
box box1; // 建立对象box1不指定实参 注意写法box1()不对
cout<<"the volume of box1 is"<<box1.volume()<<endl;
box box2(15,30,25); //建立对象box2指定3个实参
cout<<"the volume of box2 is"<<box2.volume()<<endl;
return 0;
}
进一步改进:使用默认参数的构造函数需要注意的几点
(1)应在声明构造函数时指定默认值,不能只在定义构造函数时指定默认值。、
(2)最好不同时使用构造函数的重载和有默认参数的的构造函数比如 box() box(int,int=10,int=10)(有一个参数不是默认参数)容易出现歧义
#include<iostream>
using namespace std;
class box
{
public:
box(int h=10,int w=10,int len=10);
int volume();
private:
int height;
int width;
int length;
} ;
box::box(int h,int w,int len)
{
height=h;
width=w;
length=len;
}
int box::volume()
{
return (height*width*length);
}
int main()
{
box box1;
cout<<"the volume of box1 is"<<box1.volume()<<endl;
box box2(15);
cout<<"the volume of box2 is"<<box2.volume()<<endl;
box box3(15,30);
cout<<"the volume of box3 is"<<box3.volume()<<endl;
box box4(15,30,20);
cout<<"the volume of box4 is"<<box4.volume()<<endl;
}