C++构造和析构_今天快乐了霉的博客-程序员宅基地

技术标签: 构造和析构  

构造函数

构造函数的作用是给类中的数据成员初始化,在一个类对象产生的时候自动调用,构造函数分为带参构造、无参构造。

带参、无参构造

他俩唯一的区别就是一个有参数,一个没参数,视实际情况使用

class  CMyC
{
   int a;
   float b;
   char ch[10];
public:
   CMyC(int a,float b,char *ch);//带参
   CMyC();//无参
}
CMyC::CMyC()
{ 
   a=1;
   b=2.1f;
   strcpy(ch,"xiao fang");
}
CMyC::CMyC(int a,float b,char *ch)
{ 
   this->a=a;
   whis->b=b;
   strcpy(this->ch,ch);
   //这里会用this是因为参数名与类成员名相同,为防止命名污染才用
}

它在一个类对象被建立的时候自动调用,完成初始化

int main()
{
   CMyC temp;//这里,调用构造函数
   
   return 0;
}

成员初始化列表

在一些特殊的情况下,类中数据成员并不能被直接赋值,那该怎么办呢,有一个东西叫成员初始化列表。
成员初始化列表只能写在函数的定义后面,可以将它理解为一种构造

class CMyC
{
   const int a;
   const int b;
   int c;
public:
   CMyC();
}
CMyC:: CMyC():a(123),b(456)  //正确,有多项需要初始化时用逗号间隔,不需分号结尾
{			     //且此处必须初始化,不然也会出错
   c=789;
}
CMyC:: CMyC()
{
   a=123;//错误
   b=456;//错误
   c=789;
}
``

析构函数

析构的作用与构造的作用相反,构造是从无到有(初始化),析构是从有到无,简单的说,析构就是对类中的操作进行收尾工作(释放内存等),它在一个类对象的生存期结束之后被自动调用,它与构造除了说明上有些许的不同外,还有就是没有参数列表

class CMyC
{ 
   int *p;
  public:
    CMyC();//构造函数
   ~CMyC();//析构函数
}
CMyC::CMyC()
{
   p=new int;
}
CMyC::~CMyC()
{
if(p)
   delete p;
}

一个类中有且只能有一个析构,系统会提供一个隐式的啥都不干的析构,如果我们自己写了一个,就会覆盖掉系统提供的那一个。
那么析构在什么时候需要我们自己说明呢,当类中数据成员存在指针,且指针指向一个动态内存,那么就需要写析构

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Lost_Rabbit/article/details/84875088

智能推荐

idea jpa方法 自动提示_牛逼!IDEA不愧为神器,结合Groovy脚本,简直天下无敌!..._weixin_39905037的博客-程序员宅基地

# 导语如今, 有许许多多的插件或者编辑器都支持根据数据表自动生成数据实体类了, 比如IDEA, 各种MyBatis的代码生成工具, 等等;本篇介绍一下如何使用IDEA的groovy脚本文件生成带JPA注解的实体类。# 使用IDEA连接数据库注意正式版IDEA才有此功能, 社区版木有演示图片使用的IDEA版本为2018.3, 不同版本界面可能有细小差别1、创建新的数据连接如果没有, 可以...

2021年如何科学的“微调”预训练模型?_kaiyuan_sjtu的博客-程序员宅基地

前言笔者刚刚入门NLP的时候,其实还和朋友们调侃过“attention is all you need"这么绝对的标题也敢发出来?当然似乎后来还有一个paper是“cnn is a...

JsonView用法_cauchy6317的博客-程序员宅基地

@JsonView是jackson json中的一个注解,Spring webmvc也支持这个注解。源码如下:@Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, // since 2.5 ElementType.TYPE //...

onresize事件会被多次触发_如何修复移动浏览器上 touchend 事件不触发的bug_weixin_39844525的博客-程序员宅基地

最近做移动端一个简单的下拉刷新功能,遇到移动端浏览器touchend事件不触发的bug监听一个 DOM 元素的 touchstart, touchmove, touchend 事件。如果只是 touch 一下这个 DOM 元素, 会触发 touchstart, touchend, 很正常。如果按住这个 DOM 元素, 滑动一下后放手, 发现只会触发 touchstart, touchmove, 而...

spring AOP @AfterThrowing没有返回值的原因_afterthrowing返回值_LzwGlory的博客-程序员宅基地

import java.util.Map;import javax.servlet.http.HttpServletRequest;import org.apache.log4j.Logger;import org.apache.shiro.web.servlet.ShiroHttpServletRequest;import org.aspectj.lang.JoinPoint;im

随便推点

大混沌之——Ubuntu下遇到的各种问题_soulhdb的博客-程序员宅基地

一.触控板禁止问题     这个是困扰我很久的问题,linux下的Fn组合键刚好触控板的组合键失效,每次码东西的时候手老是碰到触控板,搞的鼠标乱飞,很不爽,写个shell,每次需要手动运行,输密码什么的,这个解决方法也不是令人很满意,于是网上搜索了各种方法,总算解决了这个问题.     这样写shell就避免了每次需要手动输密码:     #!/bin/bash     MYPASSWORD="root"     echo $MYPASSWORD |sudo -S rmmod psmouse 2>/

SOFTMAX回归_托尼stark的博客-程序员宅基地

一、softmax回归与线性回归适用于输出为连续值的情景不同,它适用于像图像类别这样的离散值,主要解决分类问题,且softmax回归的输出单元从一个变成了多个。然而直接使用输出层会面临两个问题:一是由于输出层的范围不确定,难以直观的判断这些值的意义。二是由于真实标签是离散值,这些离散值与不确定范围的输出值之间的误差难以衡量。二、softmax运算符:解决了以上两个问题,它通过将输出值变换成值为正且和为1的概率分布。交叉熵损失函数:前面提到使用softmax运算后可以更方便的计..

Android自动识别<a>标签的自定义TextView(可自定义点击事件)_lemonteazhang的博客-程序员宅基地

背景:项目中要实现类似淘宝客服智能机器人,客服发送一段带有超链接的文字,例:"想知道印尼好吃的餐馆都在哪么,看看资讯列表你就知道啦,this is a good place to eat dinner with friend,也可以去百度获取最新相关资讯",显示在聊天页面,点击带有超链接的文字跳转到应用内指定页面或者打开网页.实现方式参考了http://blog.csdn.net/lvsh

Vert.x学习之json_vertx json转string_苏文星的博客-程序员宅基地

JSON在java语言中,java并没有对json提供原生的支持。但在Vert.x中有两个类提供这样的支持。JSON 对象JsonObject类用来描述JSON对象。一个JSON 对象基本上只是一个 Map 结构。它具有字符串的键,值可以是任意一种JSON 支持的类型(如 string, number, boolean)。JSON 对象也支持 null 值。创建 JSON

性能测试基础及loadRunner的使用(超详细)_loadrunner试用_zjruiiiiii的博客-程序员宅基地

狭义的并发用户数:同一时刻,使用系统的同一个功能(发送请求)的用户数量。(后面使用loadRunnner进行性能测试都是狭义的)广义的并发用户数:同一时刻,给服务器产生压力(发送请求) 的用户数量。不用严格要求使用的是不是同一个功能。系统用户数:注册这个系统的用户数量。在线用户数:某一时刻登录系统的数量。狭义和广义的并发放用户数,都是基于在给服务器发送请求的基础上计算的。而系统用户数和在线用户数它们不一定都正在给服务器发送请求。例如:系统用户数中有注册后不再使用的,就不给服务器发送请求了。在线用户数

中国Github Top20活跃项目——OCR最火Repo_Wang_AI的博客-程序员宅基地

关注公众号,发现CV技术之美壹、导读OCR方向的工程师,之前一定听说过PaddleOCR这个项目,其主要推荐的PP-OCR算法更是被国内外企业开发者广泛应用,短短半年时间,累计Star数...

推荐文章

热门文章

相关标签