无参构造函数
对类的对象进行初始化(对数据成员赋初始值)是一个好的习惯,用构造函数来实现。使具体对象有确定内容。
Time
{public:
Time()//声明无参构造函数
Time:Time(){a=0; b=0; c=0;}// 定义构造函数
Time t1;
t1.settime()
1.实例化类对象时自动调用构造函数,建立一个对象,就执行且执行一次;
2.用一个类对象初始化另一个类对象
Time t1;
Time t2 = t1;
有参构造函数
无参构造函数(各对象同一组初值)-有参构造函数(不同对象不同初值)
类内声明 Box(int,int,int);
类外定义 Box::Box(int h, intw, int len){height=h, width=w,length=len};
建立对象传入初值 Box box1(1, 2,3);
以上也可用参数化列表
用参数化列表时,若数据成员是数组,则只能在函数体(即花括号中)用语句赋值:
class Student
{public:
Student(int n,char s,nam[])::num(n),sex(s) { strcpy(name,nam); }
Private:
int num; char sex; charname[20];
定义对象 Student stud1(101,‘m’,“Wang”)
构造函数重载
一个类中定义多个构造函数,为对象提供不同的初始化方法,供用户选用;有相同的名字而参数的个数或类型不同;
Student(){num=1,score=10}//无参
Student(int n,ints)::num(n),score(s)//有参
Student stu1;//分别调用
Student stu2(2,20); //分别调用
说明:对象建立时只选一个构造函数执行
两种默认构造函数
Box(int=1,int=2,int=3);//建立对象时给0-3个实参都可以,比较自由不会出错
Box();//无参构造函数
说明:
1.建立对象时不用给出实参的构造函数为默认构造函数,一个类必须有且仅有一个默认构造函数(如果没有系统生成一个,但不起初始化作用,如果要初始化则必须自己定义)
2.在声明构造函数时就需要指定参数的默认值,如Box(int=1,int=2,int=3);
3.为了避免歧义性,一般在使用构造函数的重载的时候包括有默认参数的构造函数