C++构造函数与析构函数

C++构造函数与析构函数

构造函数

当定义一个对象时,必须调用构造函数建立该对象并进行初始化,也叫做实例化函数。构造函数绝大情况下是共有的成员函数。

构造函数的特征:
1.函数名与类名相同
2.构造函数没有返回值,返回的就是构造的对象
3.构造函数只能被系统调动一次
4.构造函数可以重载,可以构造不同参数的对象。
5.如果类中没有定义构造函数,则系统会自动给出一个缺省的构造函数。

//构造函数举例
class CGoods
{
private:
  char Name[21];
  int Amount;
  float Price;
  float Total_value;
public:
    CGoods(char* name,int amount,float price)//带有三个参数的构造函数
    {
       strcpy(Name,name);
       Amount=amount;
       Price=price;
       Total_value=price*amount;
    }
   CGoods(char *name,float price)//带有两个参数的构造函数
   {
       strcpy(Name,name);
       Amount=0;
       Price=price;
       Total_value=0.0;
   }
   CGoods(int x=0):value(x)//带有一个参数的构造函数
   {
   //等同于value=x;
   }
  CGoods()//不带参数的构造函数
  {
       Name[0]='\0';
       Amount=0;
       Price=0.0;
       Total_value=0.0;
   }
}
int main()
{
   CGoods c1("C++",10,100);//调用带三个参数的构造函数
   CGoods c2("C++2",10);//调用带两个参数的构造函数
   CGoods c3;//调用不带参数的构造函数
}

注意:创建对象时需要调动构造函数,调用构造函数有实参则加括号,调用缺省函数不加括号。不能用CGoods c4()来调动,因为会与函数声明发生冲突。

构造函数的功能:1.创建对象,注意不是创建空间。 2.对对象的成员进行初始化 3.进行类型转换,运算符重载。

析构函数

当一个对象的声明周期结束时,C++会自动调动一个函数注销该对象并进行”善后“工作,这个特殊的成员函数就是析构函数。

析构函数的特征:
1.析构函数名与类名相同,但要在前面加上字符‘’,如CGoods()。
2.析构函数无参数返回类型,也不带任何参数。
3.一个类有且只有一个析构函数。析构函数可以缺省。
4.对象注销时,系统将自动调用析构函数。

~CGoods()//析构函数
{
}

注意,c++是面向对象的语言,空间是空间,对象是对象。有空间,不一定有对象。必须先分配空间再定义对象。
所以,调动函数,函数中有对象,先给对象分配空间,函数结束,先析构对象再回收空间。
全局变量 在.data区创建空间,主函数在.stack区创建空间。而在数据区和栈区的空间的申请和释放由系统控制,对象的创建和析构也由系统控制。

对于没有任何属性的空对象,也会给其分配空间,因为有对象必然要有空间,会分配1字节的空间,叫做占位符。系统会为其添加一个缺省的构造函数和析构函数。自己本身也可以调动析构函数进行自我销毁。

class Empty
{
public:
    empty()
    {
    }
    ~empty()
    {
    }
}
int main()
{ 
    Empty a;//此时a占有一个字节的空间 sizeof(a)=1
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值