首页 > 代码库 > C++ 构造函数

C++ 构造函数

【1】构造函数的命名方式

  构造函数的名字必须与类名同名,而不能由用户任意命
  名,以便编译系统能识别它并把它作为构造函数处
  理。
【2】有关构造函数的使用,有以下说明:
  (1) 在类对象进入其作用域时调用构造函数。
  (2) 构造函数没有返回值,因此也不需要在定义构
        造函数时声明类型,这是它和一般函数的一个重要
        的不同之点。
  (3) 构造函数不需用户调用,也不能被用户调用。
  (4) 在构造函数的函数体中不仅可以对数据成员赋
       初值,而且可以包含其他语句。但是一般不提倡在
       构造函数中加入与初始化无关的内容,以保持程序
       的清晰。
  (5) 如果用户自己没有定义构造函数,则C++
       会自动生成一个构造函数,只是这个构造函数的函
       数体是空的,也没有参数,不执行初始化操作。
【3】(1) 带参数的构造函数中的形参,其对应的实参
    在定义对象时给定。
    (2) 用这种方法可以方便地实现对不同的对象进
    行不同的初始化。

#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,50);        cout<<"The volume of box is"<<box1.volume()<<endl;        Box box2(13,43,23);        cout<<"The volume of box is"<<box2.volume()<<endl;        return 0;}
View Code

 

【4】 用参数初始化表对数据成员初始化C++还提供另一种
          初始化数据成员的方法————参数初始化表来实现对
   数据成员的初始化。这种方法不在函数体内对数据成员初始化,而是在函数首部实现。例如例
     定义构造函数可以改用以下形式:
   Box Box(int h,int w,int len):height(h) width(w) length(len){ }
   这种写法方便、简练,尤其当需要初始化的数据成
   员较多时更显其优越性。甚至可以直接在类体中(而不是在类外)定义构造函数

【5】构造函数的重载
       在一个类中可以定义多个构造函数,以便对类对象
    提供不同的初始化的方法,供用户选用。这些构造
    函数具有相同的名字,而参数的个数或参数的类型
    不相同。这称为构造函数的重载。
    

#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(){        height = 10;        width = 10;        length = 10;}int Box::volume(){        return (height*width*length);}int main(){        Box box1;        cout<<"The volume of box1 is"<<box1.volume()<<endl;        Box box2(15,30,25);        cout<<"The volume of box2 is"<<box2.volume()<<endl;        return 0;        return 0;}
View Code

(1) 调用构造函数时不必给出实参的构造函数,称
  为默认构造函数(default constructor)
  显然,无参的构造函数属于默认构造函数。一个类只能有一个
  默认构造函数。
(2) 如果在建立对象时选用的是无参构造函数,应
  注意正确书写定义对象的语句。
(3) 尽管在一个类中可以包含多个构造函数,但是
  对于每一个对象来说,建立对象时只执行其中一个
  构造函数,并非每个构造函数都被执行。