C++面向对象编程入门:构造函数与析构函数(二)

 出处:PConline     作者:管宁      责任编辑:xietaoming

下面我们来看一个带参数的构造函数是如何进行对象的始化操作的。

  代码如下:

#include <iostream
using namespace std;   
class Teacher 

    public
    Teacher(char *input_name)//有参数的构造函数 
    { 
        name=new char[10]; 
        //name=input_name;//这样赋值是错误的 
        strcpy(name,input_name); 
    } 
    void show(); 
 
    protected
    char *name; 
 
}; 
 
void Teacher::show() 

    cout<<name<<endl; 

 
void main() 

         //Teacher a;//这里是错误的,因为没有无参数的构造函数 
    Teacher a("test"); 
    a.show(); 
    cin.get(); 
}

  我们创建了一个带有字符指针的带有形参的Teacher(char *input_name)的构造函数,调用它创建对象的使用类名加对象名称加扩号和扩号内参数的方式调用,这和调用函数有点类似,但意义也有所不同,因为构造函数是为创建对象而设立的,这里的意义不单纯是调用函数,而是创建一个类对象。

  一旦类中有了一个带参数的构造函数而又没无参数构造函数的时候系统将无法创建不带参数的对象,所以上面的代码

Teacher a;

  就是错误的!!!

  这里还有一处也要注意

//name=input_name;//这样赋值是错误的

  因为name指是指向内存堆区的,如果使用name=input_name;会造成指针指向改变不是指向堆区而是指向栈区,导致在后面调用析构函数delete释放堆空间出错!(析构函数的内容我们后面将要介绍)

  如果需要调用能够执行就需要再添加一个没有参数的构造函数

  对上面的代码改造如下:

#include <iostream
using namespace std;   
class Teacher 

    public
    Teacher(char *input_name) 
    { 
        name=new char[10]; 
        //name=input_name;//这样赋值是错误的 
        strcpy(name,input_name); 
    } 
    Teacher()//无参数构造函数,进行函数重载 
    { 
     
    } 
    void show(); 
 
    protected
    char *name; 
 
}; 
 
void Teacher::show() 

    cout<<name<<endl; 

 
void main() 

    Teacher test; 
    Teacher a("test"); 
    a.show(); 
    cin.get(); 
}

  创建一个无阐述的同名的Teacher()无参数函数,一重载方式区分调用,由于构造函数和普通函数一样具有重载特性所以编写程序的人可以给一个类添加任意多个构造函数,来使用不同的参数来进行初始话对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值