1619-7 张良 十一月二十三号总结 [连续第五十四天]

标题 学习学习

关键词  构造函数

内容

1  析构函数

析构函数可以由用户定义,也可以由系统自动生成。如果用户没有为类定义析构函数,则系统为类生成一个缺省的析构函数,该缺省的析构函数是空函数,即函数体中没有语句。

析构函数的使用

#include <iostream>

#include<string.h>

class G

{

    char *s;

public:

    G(char *p)

    {

        int n=strlen(p);

        s=new char[n+1];

        strcpy(s,p);//strcpy(s1,s2);strcpy函数的意思是:把字符串s2中的内容copy到s1中,连字符串结束标志也一起copy.

这样s1在内存中的存放为:ch\0;

        std::cout<<"调用了构造函数\n";

    }

    ~G()

    {

        std::cout<<"调用了析构函数\n";

        delete []s;

    }

    void print()

    {

        std::cout<<s<<std::endl;

    }

};

int main()

{

    G g1("c++ program");

    g1.print();

}

输出的是 

   //其实并没有太懂,觉的书上的定义好难懂 = =

2  缺省构造函数

每个类·都有构造函数,如果用户没有给类定义构造函数,则编译系统自动生成一个缺省的构造函数。该缺省的构造函数没有参数,其函数体内也没有语句,他仅用来生成对象而不是初始化对象。只要用户在定义了构造函数时,编译系统就不用为类生成缺省值的构造函数。例如类H和I

class H
 {
int a,b;
 };
class I
{
int a,b;
public:
I(int ti, int t2)
{a=ti;b=t2;}
 };

系统会给H增加一个公有的构造函数:

H(){}

由于该构造函数内部没有功能语句,所以不能始初话对象的成员,如果以下列方式定义类H的对象;

H h1;

则对象的数据成员不定。

由于类I定义时提供了一个构造函数,所以编译系统就不再为类I提供缺省的构造函数。此时如果以下列的方式确定类I的对象:

I i1;//错误
I i1(1,2)

//这个我懂


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值