【C++类和对象】构造和析构以及初始化参数列表

2024-08-30 19:04

本文主要是介绍【C++类和对象】构造和析构以及初始化参数列表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 1 构造和析构
    • 1.1构造函数
      • 1.1.1 初始化参数列表
    • 1.2 析构函数
      • 1.2.1 动态内存分配及释放

1 构造和析构

1.1构造函数

构造函数:完成对象的初始化

特性:

  • 构造函数名称与类名一致,无返回类型,在对象创建时由编译器自动调用,在对象的生命周期类只被调用一次
  • 构造函数可以构成重载
  • 构造函数如果在类中不显示写,将由编译器自动生成默认构造函数
    • 默认生成的构造函数对于内置类型不做处理如:int char double...,对于自定义类型会调用它的默认构造
    • 显示写了构造函数,就不会生成默认构造了,可通过default关键字强制生成默认构造函数
  • 默认的构造函数包括:编译器生成的构造函数、无参的构造函数以及全缺省的构造函数。这三种构造函数只能同时存在一种
//以下只做演示,三种默认构造只能存在一种
class A{
public://强制编译器生成默认的构造函数A() = default;A(){//无参构造函数x = 0;y = 0;}A(int a = 0,int b = 0){//全缺省的构造函数x = a;y = b;}
private:int x;int y;
};

1.1.1 初始化参数列表

类中的一些特殊成员变量并不能都在构造函数的函数函数体内进行初始化const修饰的常量、引用、子类中构造父类...,这里就需要使用初始化参数列表对特殊的成员变量进行初始化。

初始化参数列表的形式如下:

class A{
public://在函数的括号后使用 : 成员变量(参数) 使用逗号进行分割//A(int a,int b):x(a),y(b){}A(int a,int b): x(a), y(b){}
private:int x;int y;
};

特性:

  • 初始化列表是成员变量定义的地方
  • 不管有没有显示写初始化参数列表,编译器在调用构造函数时都会先走初始化参数列表
    • 在C++11新特性中,允许在类中声明变量时给上缺省值,这里的缺省值实际上是给初始化参数列表使用的
  • 初始化参数列表初始化的顺序与成员函数的声明顺序一致

1.2 析构函数

析构函数:释放对象中动态开辟的空间(即储存在堆中的空间)

特性:

  • 析构函数的函数名是类名前加上~
  • 析构函数会在对象生命周期结束时自动调用
  • 析构函数不能进行重载
  • 析构函数每个类都有,没显示写编译器会自动生成一个默认的构造函数
    • 默认的构造函数会调用自定义类型的析构函数

1.2.1 动态内存分配及释放

C++提供new关键字动态开辟内存,delete关键字释放动态内存

  • T* ptr = new T;开辟T类型大小的空间,返回地址,并调用T的构造函数,使用delete ptr释放空间
  • 也可以一次分配多个对象,返回第一个对象的地址T* ptr = new T[n]一次分配n个对象,使用delete[] ptr释放空间
  • new分配空间和delete释放空间时分别会调用对象的构造函数和析构函数
  • new只会开辟空间不会对空间初始化,delete只会释放空间不会将指针置空
class A{
public://构造函数A(int a,int n):x(a),ptr(new int[n]){for(int i = 0;i < n;++i){ptr[i] = i;}}//析构函数~A(){delete[] ptr;}
private:int x;int* ptr;
};

这篇关于【C++类和对象】构造和析构以及初始化参数列表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1121670

相关文章

在java中如何将inputStream对象转换为File对象(不生成本地文件)

《在java中如何将inputStream对象转换为File对象(不生成本地文件)》:本文主要介绍在java中如何将inputStream对象转换为File对象(不生成本地文件),具有很好的参考价... 目录需求说明问题解决总结需求说明在后端中通过POI生成Excel文件流,将输出流(outputStre

C++ 中的 if-constexpr语法和作用

《C++中的if-constexpr语法和作用》if-constexpr语法是C++17引入的新语法特性,也被称为常量if表达式或静态if(staticif),:本文主要介绍C++中的if-c... 目录1 if-constexpr 语法1.1 基本语法1.2 扩展说明1.2.1 条件表达式1.2.2 fa

一文带你了解SpringBoot中启动参数的各种用法

《一文带你了解SpringBoot中启动参数的各种用法》在使用SpringBoot开发应用时,我们通常需要根据不同的环境或特定需求调整启动参数,那么,SpringBoot提供了哪些方式来配置这些启动参... 目录一、启动参数的常见传递方式二、通过命令行参数传递启动参数三、使用 application.pro

C++中::SHCreateDirectoryEx函数使用方法

《C++中::SHCreateDirectoryEx函数使用方法》::SHCreateDirectoryEx用于创建多级目录,类似于mkdir-p命令,本文主要介绍了C++中::SHCreateDir... 目录1. 函数原型与依赖项2. 基本使用示例示例 1:创建单层目录示例 2:创建多级目录3. 关键注

C++从序列容器中删除元素的四种方法

《C++从序列容器中删除元素的四种方法》删除元素的方法在序列容器和关联容器之间是非常不同的,在序列容器中,vector和string是最常用的,但这里也会介绍deque和list以供全面了解,尽管在一... 目录一、简介二、移除给定位置的元素三、移除与某个值相等的元素3.1、序列容器vector、deque

C++常见容器获取头元素的方法大全

《C++常见容器获取头元素的方法大全》在C++编程中,容器是存储和管理数据集合的重要工具,不同的容器提供了不同的接口来访问和操作其中的元素,获取容器的头元素(即第一个元素)是常见的操作之一,本文将详细... 目录一、std::vector二、std::list三、std::deque四、std::forwa

C++字符串提取和分割的多种方法

《C++字符串提取和分割的多种方法》在C++编程中,字符串处理是一个常见的任务,尤其是在需要从字符串中提取特定数据时,本文将详细探讨如何使用C++标准库中的工具来提取和分割字符串,并分析不同方法的适用... 目录1. 字符串提取的基本方法1.1 使用 std::istringstream 和 >> 操作符示

C++原地删除有序数组重复项的N种方法

《C++原地删除有序数组重复项的N种方法》给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度,不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(... 目录一、问题二、问题分析三、算法实现四、问题变体:最多保留两次五、分析和代码实现5.1、问题分析5.

C++ 各种map特点对比分析

《C++各种map特点对比分析》文章比较了C++中不同类型的map(如std::map,std::unordered_map,std::multimap,std::unordered_multima... 目录特点比较C++ 示例代码 ​​​​​​代码解释特点比较1. std::map底层实现:基于红黑

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程