C++基础

news/2024/11/5 11:37:29
想知道更多区块链技术知识,请百度【链客区块链技术问答社区】


 构造函数

  1. 定义

    与类同名、无返回值类型的成员函数。
    析构函数是对象创建的一部分,在创建对象时,会被自动调用;创建对象后,析构函数就不能再被调用
    默认析构函数:不带参数,或者所有参数都有默认值的的析构函数,析构函数可以重载。
    类的析构函数一般是公开的,但是有时也把析构函数声明为私有的(如单例模式中就把析构函数声明为私有的),其作用是限制创建该类对象的范围。

  1. 调用

    根据参数进行重载,决定调用哪个析构函数。

  1. 成员初始化表

    对于常量数据成员和引用数据成员(某些静态成员除外),不能在声明它们时进行初始化,也不能采用赋值操作对它们初始化。
 
class A
{

int x;
const int y=1;//Error
int &z=x;//Error

public:

A()
{
    x=0;//OK
    y=1;//Error,y是常量成员,其值不能改变
}

}
    它们的初始化要在成员初始化表中进行。
class A
{

int x;
const int y;
int& z;

public:

A(): z(x),y(1)
{
     x=0;
}

}
    或
class A
{

int x;
const int y;
int& z;

public:

A(): x(0),z(x),y(1)
{
}

}
    成员初始化表的次序不决定它们的初始化次序,它们的初始化次序由它们在类中的定义的次序决定。
    如果类中含有常量数据成员或引用数据成员,一定要定义带有成员初始化表的构造函数,否则编译程序生成的默认构造函数是没有成员初始化表的,这样的类是不能创建对象的。
在创建包含成员对象的对象时,首先调用本身类的构造函数,在进入本身类的析构函数之前,将会去调用成员对象类的构造函数,然后再执行本身构造函数的函数体(在继承中,要先调用基类的构造函数,再调用成员对象类的构造函数,最后执行自己的函数体)。即使成员对象初始化表为空,只要类中有成员对象,编译程序就会生成对成员对象构造函数的调用指令,只不过它调用的默认构造函数。
析构函数

  1. 定义

    “~<类名>”
    没有参数和返回值类型的成员函数。

  1. 调用

    当对象消亡时,在系统收回它所占的存储空间之前,它的析构函数会自动被调用。
    一般清空下不需要定义析构函数,但是,如果对象在创建后申请了一些资源并且没有归还这些资源,就要定义析构函数在对象消亡前归还这些资源。
    如果类中为提供析构函数,编译程序会在需要时隐式提供一个析构函数,该析构函数负责调用成员对象类和基类的析构函数。

class A()
{

char *str;

public:

A()
{
    str=NULL;
}
A(const char *p)
{
    str = new char(strlen(p)+1);
    strcpy(str,p);
}
~A()
{
    delete []str;
    str = NULL;
}

}
    当包含成员对象的对象消亡时,先调用本身类的析构函数,本身类的析构函数的函数体执行完毕后,再调用成员函数对象类的析构函数(在继承中,先调用和执行自己的析构函数,然后调用成员对象类的析构函数,最后调用基类的析构函数)。如果有多个成员对象,则成员对象析构函数的调用次序与它们定义的次序正好相反。

我是【链客】六级算力等级《守护平井一夫》 为各位解答区块链技术问题,欢迎加入。
链客区块链技术问答社区,有问必答!!
国内域名:www.liankexing.com 复制网址至浏览器即可进入社区
国际域名:www.lk.wiki QQ群: 725414372


http://www.niftyadmin.cn/n/4518245.html

相关文章

JAVA 拾遗 — CPU Cache 与缓存行

最近的两篇文章&#xff0c;介绍了我参加的中间件比赛中一些相对重要的优化&#xff0c;但实际上还存在很多细节优化&#xff0c;出于篇幅限制并未提及&#xff0c;在最近的博文中&#xff0c;我会将他们整理成独立的知识点&#xff0c;并归类到我的系列文章「JAVA 拾遗」中。 …

Cocos2d-x 坐标转换

cocos2d-x是基于openGLES的&#xff0c;所以遵循openGL的坐标系&#xff0c;也就是说是以屏幕的左下角为坐标原点&#xff0c;如下图&#xff1a; 屏幕坐标系一般是以左下角为坐标原点&#xff0c;如下图所示&#xff1a; 在开发cocos2d-x程序时一定要注意坐标轮换问题&#xf…

Linux 基础知识(五)

一、每12小时备份并压缩/etc/目录到/back目录中&#xff0c;保存文件名格式为&#xff0c;etc-年-月-日-时-分.tar.gz&#xff09; crontab -e *12/*** /usr/bin/tar -czf date %F-%H-%M-etc.tar.gz /etc/ 二、rpm包管理功能总结以及实例应用演示rpm命令&#xff1a;rpm [OPTIO…

「镁客早报」蓝色起源完成无人火箭试飞;知名对冲基金做空高通

亚马逊首批送货机器人Scout上线&#xff0c;正在西雅图附近展开测试&#xff1b;Facebook COO桑德伯格称支持扎克伯格继续担任CEO。 1.贝佐斯私人航天公司完成无人火箭试飞&#xff0c;有望载人飞行 据悉&#xff0c;亚马逊公司CEO杰夫贝佐斯(Jeff Bezos)旗下私人航天公司蓝色…

Python零基础学习笔记(二十四)—— 函数

认识函数&#xff1a;在以恶完整的项目中&#xff0c;某些功能会反复的使用&#xff0c;那么会将功能封装成函数&#xff0c;当我们要使用这些功能的时候直接调用函数即可本质&#xff1a;函数就是对功能的封装优点&#xff1a; 1、简化代码结构&#xff0c;增加了代码的复用度…

Linux中的sleep、usleep、nanosleep、poll和select

在进行Linux C/C编程时&#xff0c;可调用的sleep函数有好多个&#xff0c;那么究竟应当调用哪一个了&#xff1f;下表列出了这几个函数间的异同点&#xff0c;可作为参考&#xff1a; 性质 精准度 线程安全 信号安全 sleep libc库函数 秒 是 不能和alarm同时使用 …

Apache Hadoop生态系统

Hadoop从诞生至今已经发展成为一个大数据相关的庞大的软件生态系统。这里收集整理了跟Hadoop相关的Apache下的开源项目&#xff0c;以供后续分析研究。 Apache Hadoop Hadoop是一个大数据处理框架&#xff0c;它可用于从单台到数以千计的服务器集群的存储和计算服务。HadoopDis…

AlexNet卷积神经网络【前向反馈】

1.代码实现 1 # -*- coding: utf-8 -*-2 """3 Created on Wed Nov 14 17:13:05 20184 5 author: zhen6 """7 8 from datetime import datetime9 import math10 import time11 import tensorflow as tf12 13 batch_size 3214 num_batchs 10015 …