0

0

c++如何创建类和对象_c++面向对象编程入门【详解】

穿越時空

穿越時空

发布时间:2026-03-16 17:09:23

|

949人浏览过

|

来源于php中文网

原创

类定义末尾必须加分号,否则编译报错;栈对象自动管理生命周期,堆对象需手动或智能指针管理;未定义构造函数时内置成员不初始化;private成员不可外部访问,const函数不改变访问权限。

c++如何创建类和对象_c++面向对象编程入门【详解】

类定义必须写分号结尾,否则编译器直接报错

很多人写完 class MyClass { ... } 忘记末尾加 ;,结果编译器报出一堆看不懂的错误,比如 expected unqualified-id before 'public' 或者直接卡在下一行代码上。C++ 类定义是声明语句,和结构体一样,结尾需要分号——这不是风格问题,是语法硬性要求。

实操建议:

立即学习C++免费学习笔记(深入)”;

  • 所有类定义(无论是否带模板、继承或访问控制)末尾都补上 ;
  • 用 IDE 时开启括号/分号自动补全,但别依赖它;手动敲完 } 后立刻按 ;
  • 如果类定义嵌套在命名空间里,分号仍属于类本身,不是命名空间的结束符

对象创建:栈上 vs 堆上,内存生命周期差得远

MyClass obj;MyClass* ptr = new MyClass(); 看似都在“创建对象”,但行为完全不同:前者在栈上分配,函数返回自动销毁;后者在堆上分配,不手动 delete 就会泄漏。新手常把两者混用,尤其在函数返回对象时误用指针。

实操建议:

立即学习C++免费学习笔记(深入)”;

  • 优先用栈对象:MyClass obj; —— 简单、安全、无须管理
  • 只有明确需要动态生命周期(比如对象存活时间超出当前作用域,或大小在运行时才确定)才用 new
  • new 就必须配对 delete;更推荐用 std::unique_ptr<myclass></myclass> 自动管理
  • 返回局部栈对象?没问题,C++17 起 guaranteed copy elision 让它高效又安全

构造函数没写,编译器只给默认版本,别指望它做初始化

如果你没定义任何构造函数,编译器会自动生成一个默认构造函数(MyClass() = default;),但它什么也不做——成员变量不会被初始化为 0,尤其是内置类型如 intdouble、指针,值是未定义的。一用就崩,或者数据错得离谱。

阿里妈妈·创意中心
阿里妈妈·创意中心

阿里妈妈营销创意中心

下载

实操建议:

立即学习C++免费学习笔记(深入)”;

  • 只要类里有需要初始化的成员(比如指针、容器、自定义资源),必须显式写构造函数
  • 用成员初始化列表(MyClass() : x_(0), ptr_(nullptr) {})比在函数体内赋值更高效、更安全
  • 想禁用默认构造?加 MyClass() = delete;,别留空让编译器猜
  • 注意:如果写了带参构造,编译器就不会再生成默认构造,除非你显式写出来

private 成员不能在类外访问,但 friend 和 const 成员函数容易混淆

声明为 private: 的成员,连对象点号调用都不行,比如 obj.private_member 直接编译失败。但有人误以为 const 成员函数就能绕过访问控制,其实不能;也有人滥用 friend,结果破坏封装还引发链接错误。

实操建议:

立即学习C++免费学习笔记(深入)”;

  • private 是编译期检查,跟函数是不是 const 没关系;const 只影响 this 指针的 cv-qualifier
  • 真需要外部访问私有成员?优先考虑加 public 的 getter/setter,而不是塞 friend class
  • friend 声明要写在类内,且需提前声明友元类型,否则链接时报 undefined reference
  • 调试时想临时看 private 成员?用调试器(gdb / lldb)直接打印,别改访问权限凑合

类不是语法糖,它是 C++ 内存布局、生命周期和访问控制的交汇点。漏掉一个分号、搞混栈堆、忽略初始化、乱用 friend —— 都可能让程序在看似无关的地方突然出问题。这些点看着小,但每个都卡在编译或运行的临界线上。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
go语言 面向对象
go语言 面向对象

本专题整合了go语言面向对象相关内容,阅读专题下面的文章了解更多详细内容。

58

2025.09.05

java面向对象
java面向对象

本专题整合了java面向对象相关内容,阅读专题下面的文章了解更多详细内容。

65

2025.11.27

c语言const用法
c语言const用法

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

565

2023.09.20

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

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

510

2025.06.09

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

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

204

2025.07.04

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1071

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

617

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

335

2025.08.29

chatgpt官网入口地址合集
chatgpt官网入口地址合集

本专题整合了chatgpt官网入口地址、使用教程等内容,阅读专题下面的文章了解更多详细内容。

0

2026.03.16

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 11.5万人学习

C 教程
C 教程

共75课时 | 5.5万人学习

C++教程
C++教程

共115课时 | 22.2万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号