为了解决对象初始化问题,因而,就提出了构造函数这么一个策略。构造函数有什么特色呢?一,函数名与类名相同。二,构造函数没有返回值。有以下代码:数组
class Chair{ private: int legs; public: void Setlegs ( int leg ){ this->legs = leg; } int Getlegs ( void ){ return this->legs; } Chair ( int leg ){ this->legs = leg; } }; int main ( int argc, char** argv ){ Chair chair; //编译器会调用默认构造函数Chair(); Chair chair1 ( 4 ); //调用构造函数Chair( int leg ); Chair chair2 = 4; //调用构造函数Chair ( int leg ); system ( "pause" ); return 0; }
这段代码,在类对象被建立后,那么,编译器会为该对象分配相应的空间大小并调用构造函数。须要注意的是,类对象的声明并不会为对象分配空间,只是告诉编译器有这么一个对象存在。
构造函数能够被编译器自动调用,那构造函数能够手工调用吗?固然能够。好比,咱们建立一个类数组,而后,咱们对这个数组进行进行初始化。代码以下:ide
#include <stdio.h> #include <stdlib.h> class Chair{ private: int legs; public: int Getlegs ( void ){ return this->legs; } void Setlegs ( int leg ){ this->legs = leg; } Chair ( int leg ){ this->legs = leg; } Chair ( void ){ this->legs = 3; } }; int main ( int argc, char** argv ){ Chair chair[3] = { Chair ( 4 ), Chair ( 8 ), Chair() }; int i; for ( i = 0; i < 3; ++i ){ printf ( "%d\n", chair[i].Getlegs() ); } system ( "pause" ); return 0; }
运行代码以下:
除此以外,还有一种手工调用构造函数的方式:函数
Chair chair = Chair ( 4 );
其实这种手工调用构造函数的方式,也能够说是初始化类对象的另一种方式。this