讲师中心 微信公众号
AI工具推荐 视频效率加速

结构体如何实现构造函数 多种构造方式与初始化列表用法

老辰酱_5158

老辰酱_5158

发布时间:2025-07-25 16:23:01

|

676人浏览过

|

来源于php中文网

原创

在c++中,结构体支持构造函数、多种构造方式及初始化列表。1. 结构体可定义无返回值的同名构造函数,用于初始化对象;2. 支持构造函数重载,根据参数不同提供多个构造版本;3. 初始化列表用于提升效率并满足const、引用等成员的初始化要求;4. c++11起支持委托构造函数,简化重复代码。

结构体如何实现构造函数 多种构造方式与初始化列表用法

在 C++ 中,结构体(struct)其实和类(class)非常相似,唯一的区别是默认访问权限不同。因此,结构体也可以像类一样定义构造函数,并支持多种构造方式以及初始化列表的使用。

结构体如何实现构造函数 多种构造方式与初始化列表用法

如果你希望在定义结构体变量时就进行初始化,或者根据不同参数组合来创建对象,那么构造函数和初始化列表就是必不可少的工具。

结构体如何实现构造函数 多种构造方式与初始化列表用法

构造函数的基本写法

结构体中定义构造函数的方式和类几乎一模一样。你可以在结构体内声明一个与结构体同名、没有返回值的函数,这就是构造函数。

struct Person {
    std::string name;
    int age;

    // 默认构造函数
    Person() {
        name = "Unknown";
        age = 0;
    }

    // 带参数的构造函数
    Person(std::string n, int a) {
        name = n;
        age = a;
    }
};

这样就可以用不同的方式创建 Person 对象:

结构体如何实现构造函数 多种构造方式与初始化列表用法
Person p1;                  // 调用默认构造函数
Person p2("Alice", 25);     // 调用带参数的构造函数

多种构造方式:重载构造函数

就像普通函数一样,构造函数也支持重载。你可以根据传入参数的不同,提供多个构造函数版本。

比如:

struct Point {
    int x, y;

    Point() : x(0), y(0) {}           // 默认构造
    Point(int a) : x(a), y(a) {}      // 单参数构造
    Point(int a, int b) : x(a), y(b) {} // 双参数构造
};

调用方式如下:

C++14
C++14

C++14 对 C++11 的修正与增强版本,适合旧系统维护和较老工具链兼容。

下载
  • Point p1; → 使用默认构造
  • Point p2(5); → 使用单参数构造
  • Point p3(3, 4); → 使用双参数构造

这种写法可以让你灵活地根据需求创建对象,而不需要额外的初始化步骤。


初始化列表的用法与优势

上面例子中我们用了初始化列表(: x(0), y(0)),它和在构造函数体内赋值是不一样的。

为什么推荐用初始化列表?

  • 对于基本类型来说,效果差不多。
  • 但对于类类型的成员变量,初始化列表能减少一次无意义的构造 + 赋值过程。
  • 某些情况必须使用初始化列表,比如:
    • 成员是 const 类型
    • 成员是引用类型
    • 成员没有默认构造函数

举个例子:

struct Data {
    const int value;
    Data(int v) : value(v) {} // 必须用初始化列表
};

如果不用初始化列表,编译就会报错。


小技巧:委托构造函数简化代码

C++11 开始支持委托构造函数,也就是说一个构造函数可以调用另一个构造函数,避免重复代码。

例如:

struct Rectangle {
    int width, height;

    Rectangle() : Rectangle(0, 0) {}         // 默认构造委托给双参数构造
    Rectangle(int w, int h) : width(w), height(h) {}
};

这样写的好处是,当多个构造函数逻辑有交集时,可以复用代码,保持简洁。


基本上就这些了。结构体的构造函数虽然看起来简单,但结合多种构造方式和初始化列表之后,灵活性还是挺强的。只要注意初始化顺序、const 和引用成员的处理,就能写出清晰高效的代码。

热门AI工具

更多
墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

2278

2023.09.20

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

4894

2025.06.09

golang结构体方法
golang结构体方法

本专题整合了golang结构体相关内容,请阅读专题下面的文章了解更多。

5051

2025.07.04

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

4076

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

306

2025.12.06

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

60

2026.10.22

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

40

2026.10.22

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

40

2026.10.22

Gradle怎么构建Java项目
Gradle怎么构建Java项目

本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。

20

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++ Core Guidelines
C++ Core Guidelines

共0课时 | 0人学习

C++ Reference
C++ Reference

共0课时 | 0人学习

C++ 官方标准说明
C++ 官方标准说明

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn