【c++】构造函数

server/2025/2/8 8:16:33/

【c++】构造函数

1.函数名称与类同名:构造函数名称必须与类名严格一致。
2.无返回值类型:无需声明返回类型(包括 void
3.构造函数一般为公有来对数据成员进行初始化(对象一般不能调用构造函数 但是可以使用定位new来调用构造函数–>将原空间的数据覆盖了–>如果原空间是在堆区->会造成内存泄漏)


构造函数的作用

  • 1创建对象:构造函数在对象被实例化时自动调用,负责分配内存。
  • 2初始化成员:通过初始化列表函数体为对象的成员变量赋初始值。
  • 3支持隐式类型转换:若构造函数只有一个参数(或其余参数有默认值),可隐式转换参数类型为类类型。

定义位置

  • 类内定义:直接在类体中实现(隐式内联inline)。
  • 类外定义:在类内声明,类外实现(需通过 类名:: 限定)。
class MyClass {
public:MyClass();              // 类内声明MyClass(int x, int y);  // 重载构造函数
};MyClass::MyClass() { /* 类外定义 */ }
MyClass::MyClass(int x, int y) : a(x), b(y) { /* 初始化列表 */ }

能否重载:

  • 支持重载:可定义多个参数列表不同的构造函数。

  • 避免二义性:重载的构造函数需确保调用时参数能明确匹配某一版本。

    class Point {
    public:Point();                   // 默认构造Point(int x);              // 单参数构造Point(int x, int y = 0);   // 含默认参数(可能与 Point(int x) 冲突)
    };Point p1(5);      // 错误!无法确定调用 Point(int) 还是 Point(int, int)
    

默认构造函数

  • 系统自动生成:若未定义任何构造函数,编译器会生成一个无参的默认构造函数(不初始化成员变量)。

  • 用户自定义后失效:若定义了任意构造函数(无论是否有参数),编译器不再生成默认构造函数。

    class Demo {
    public:int val;// 未定义构造函数,编译器生成默认 Demo() {}
    };Demo d; // 合法,调用默认构造函数(val 未初始化)
    

默认参数与隐式类型转换

  • 参数缺省值:可为构造函数参数设置默认值,但需遵循从右向左连续指定规则。

  • 隐式转换条件:若构造函数仅有一个参数,或其余参数均有默认值,则可隐式转换参数类型为类类型。

    class String {
    public:String(const char* str);  // 单参数构造函数
    };String s = "hello";  // 隐式调用 String(const char*)
    
  • 禁止隐式转换:使用 explicit 关键字修饰构造函数–>必须通过显示类型强转


初始化列表

  • 高效初始化:通过成员初始化列表直接初始化成员变量(避免先默认构造再赋值)。

  • 必须使用的场景

    • 初始化 const 成员。
    • 初始化引用成员。
    • 初始化无默认构造函数的类类型成员。
    class Student {
    private:const int id;std::string name;
    public:Student(int i, const std::string& n) : id(i), name(n) {} // 正确// Student(int i, const std::string& n) { id = i; name = n; } // 错误!id 是 const
    };
    

http://www.ppmy.cn/server/165898.html

相关文章

Maven 依赖管理全面解析

目录 1. Maven 简介 2. 依赖的基本概念 依赖坐标 依赖范围 3. Maven 仓库 本地仓库 远程仓库 4. 依赖传递 5. 依赖冲突 6. 在 pom.xml 文件中管理依赖 基本依赖配置 依赖范围配置 依赖排除配置 依赖管理配置() 1. Maven 简介 Maven 是一个…

06vue3实战-----项目开发准备

06vue3实战-----项目开发准备 1.CSS样式的重置1.1先引入第三方库normalize.css1.2自己写一些默认样式 2.路由配置2.1安装路由:2.2挂载路由:2.3配置路由 3.状态管理配置3.1安装pinia3.2挂载pinia3.3创建一个store文件3.4应用store 4.网络请求封装axios4.1再封装axios4.2使用封装…

【分布式一致性全知全会】(10)顺序一致性

引子 顺序一致性是并发系统的一个强安全属性。通俗地说,顺序一致性意味着操作似乎按某种全序进行,并且该顺序与每个单独进程上的操作顺序一致。 顺序一致性无法完全或持久地实现;如果发生网络分区,部分或全部节点将无法继续运行…

基于STM32设计的仓库环境监测与预警系统

目录 项目开发背景设计实现的功能项目硬件模块组成设计思路系统功能总结使用的模块的技术详情介绍总结 1. 项目开发背景 随着工业化和现代化的进程,尤其是在制造业、食品业、医药业等行业,仓库环境的监控和管理成为了至关重要的一环。尤其是在存储易腐…

超详细UE4(虚幻4)第一人称射击(FPS)游戏制作教程

超详细UE4(虚幻4)第一人称射击(FPS)游戏制作教程 引言 在游戏开发领域,第一人称射击(FPS)游戏一直是最受欢迎的类型之一。从经典的《反恐精英》(CS)到现代的《使命召唤》(Call of Duty),FPS游戏凭借其紧张刺激的游戏体验和高度沉浸感,吸引了无数玩家。如果你是一…

【重新认识C语言----结构体篇】

目录 -----------------------------------------begin------------------------------------- 引言 1. 结构体的基本概念 1.1 为什么需要结构体? 1.2 结构体的定义 2. 结构体变量的声明与初始化 2.1 声明结构体变量 2.2 初始化结构体变量 3. 结构体成员的访…

适用于 Windows 的 Zed 编辑器的非官方稳定版。通过 scoop 或 pwsh 脚本轻松安装。不隶属于 Zed Industries

一、软件介绍(文末提供下载) Zed,这是一款由 Atom 和 Tree-sitter 的创建者提供的高性能多人 Atom and Tree-sitter.。 二、macOS 和 Linux安装 在 macOS 和 Linux 上,您可以直接下载 Zed 或通过本地包管理器安装 Zed。 本地包…

C# 综合运用介绍

.NET学习资料 .NET学习资料 .NET学习资料 C# 作为一种由微软开发的面向对象编程语言,在软件开发领域占据着重要地位。凭借其简洁、类型安全以及与.NET 框架的紧密结合等特性,C# 被广泛应用于多个领域。下面将详细介绍 C# 的综合运用。 一、C# 语言特性…