C++ 98/03 应该学习哪些知识8

《从 C++98 到 C++11:你最应该掌握的 8 大新特性》 C++11 核心特性解析 文章系统介绍了 C++11 最重要的 8 项新特性。首先详细讲解了列表初始化语法,比较了 C++98 与 C++11 的差异,并分析了 std::initializer_list 的实现机制。其次重点阐述了右值引用和移动语义,区分了左值/右值概念,展示了右值引用如何优化参数传递和资源管理,特别是在容器操作中通过移动构造和移动赋值显著提升性能。文章通过大量代码示例和汇编分析,直观呈现了这些特性在实际开发中的应用场景和优化效果,为开发者掌握现代 C++ 编程提供了实用指导。 阅读详情

访问限定符 public/protected/private

在 C++ 中,访问限定符有三种:public、protected、private,它们用于控制类的数据成员和成员函数的访问权限。具体来说:

  1. public:表示该成员对外部代码可见,可以在类的外部访问和调用。
  2. protected:表示该成员对外部代码不可见,只能在类的成员函数或其派生类中访问和调用。
  3. private:表示该成员对外部代码完全不可见,只能在类的成员函数中访问和调用。

访问限定符可以用来实现类的封装,即将数据成员和成员函数组合在一起,形成一个独立的单元,并且对外部世界隐藏其内部细节,只暴露必要的接口。这样可以提高程序的安全性和可维护性,可以防止数据被误操作或不合法的访问,也可以隔离内部实现的变化,从而不会影响外部的调用。

下面通过一个简单的示例来说明访问限定符的使用。

class Rectangle {
private:
    double length;
    double width;

public:
    void setLength(double l) {
        length = l;
    }

    void setWidth(double w) {
        width = w;
    }

    double getArea() {
        return length * width;
    }
};

int main() {
    Rectangle r;
    r.setLength(3.0);
    r.setWidth(4.0);
    double area = r.getArea(); // 正常编译和执行

    r.length = 5.0; // 编译错误,length 是私有成员,外部代码不能直接访问
    return 0;
}

在上面的示例中,Rectangle 类中有两个私有数据成员 length 和 width,分别表示矩形的长和宽。这些成员只能在类的成员函数中访问和修改,外部代码不能直接访问。另外,Rectangle 类中有三个公有成员函数 setLength、setWidth 和 getArea,分别用于设置矩形的长和宽,以及计算矩形的面积。这些函数对外部代码可见,可以在类的外部调用。

在 main 函数中,我们创建了一个 Rectangle 类的对象 r,并通过 setLength 和 setWidth 函数设置了其长和宽。然后调用 getArea 函数计算矩形的面积,并将结果赋值给 area 变量。由于 getArea 函数是公有成员函数,对外部代码可见,所以可以在类的外部调用。

最后,我们试图直接访问 r 的私有成员 length,这样会导致编译错误。因为 length 是一个私有成员,外部代码不能直接访问。这个例子说明了访问限定符的作用,它可以限制类的成员的访问权限,从而实现封装的目。

接下来,我们使用继承的概念来进一步解释访问限定符。

在 C++ 中,继承是一种重要的面向对象编程技术,它允许我们从现有的类派生出新的类,并继承原有类的属性和行为。派生类可以访问其基类中的公有和受保护成员,但不能访问其基类的私有成员。

下面我们通过一个简单的例子来说明继承和访问限定符的使用。

class Shape {
protected:
    double width;
    double height;

public:
    Shape(double w = 0.0, double h = 0.0) {
        width = w;
        height = h;
    }

    void setWidth(double w) {
        width = w;
    }

    void setHeight(double h) {
        height = h;
    }
};

class Rectangle : public Shape {
public:
    double getArea() {
        return width * height;
    }
};

int main() {
    Rectangle r(3.0, 4.0);
    double area = r.getArea(); // 正常编译和执行

    r.width = 5.0; // 编译错误,width 是 Shape 类的受保护成员,不能在派生类中直接访问
    return 0;
}

在上面的示例中,我们定义了两个类 Shape 和 Rectangle,Rectangle 类是从 Shape 类派生而来的。Shape 类有两个受保护成员 width 和 height,分别表示形状的宽和高。在 Shape 类中,我们定义了构造函数和两个公有成员函数 setWidth 和 setHeight,用于设置宽和高。Rectangle 类中有一个公有成员函数 getArea,用于计算矩形的面积。由于 Rectangle 类是从 Shape 类派生而来的,所以它可以访问 Shape 类中的受保护成员。

在 main 函数中,我们创建了一个 Rectangle 类的对象 r,并通过构造函数设置其宽和高。然后调用 getArea 函数计算矩形的面积,并将结果赋值给 area 变量。由于 getArea 函数是公有成员函数,对外部代码可见,所以可以在类的外部调用。

最后,我们试图直接访问 r 的受保护成员 width,这样会导致编译错误。因为 width 是 Shape 类的受保护成员,不能在派生类中直接访问。这个例子说明了继承和访问限定符的作用,它们可以帮助我们实现类之间的关系,以及限制成员的访问权限,从而实现更加灵活和安全的编程。

从C98到C26:C++语言的演变与进步 从C++98到C++26,C++经历了多次重大变革,每一次更新都致力于解决开发者面临的实际问题,并适应不断变化的技术环境。无论是早期的面向对象编程,还是后来的泛型编程、多线程支持和模块化设计,C++始终保持着其作为一门强大而灵活的语言的地位。对于开发者来说,了解这些变化不仅能帮助我们更好地掌握这门语言,还能让我们在项目中充分利用其最新特性,从而编写出更高效、更安全的代码。未来,C++仍将在软件开发领域发挥重要作用,值得我们持续关注和学习。 阅读详情

相关推荐

为什么很少听到C++03标准编译器?C++编译器。Java语言不同类型编译器?C/C++编译器和支持标准。

从上世纪50年代开始,编程语言五花八门,编译器和解释器层出不穷。此处只列出常见编程语言的编译器和解释器信息,不常见的编程语言有单独文章介绍。

编程语言开发、框架原理、编程思想、最佳实践技巧经验分享。致力于各种编程技术的技巧经验干货分享,讲解开发避坑技巧,追踪开发前沿技术,实战展开解决难题。 程序员小迷助您在编程路上越走越好! 1163

C++ 98/03 应该学习哪些知识17

内存溢出和内存泄漏

clayhell的博客 1204

【C/C++】C++98基础上的C++11新特性

一、新语法 1.自动类型推导auto auto的自动推导,用于从初始化表达式中推断出变量的数据类型。 //C++98 int a = 10; string s = "abc"; float b = 10.0; vector<int> c; vector<vector<int> > d; map<int, string> m; m[1] = "...

shimadear的博客 1719

C++03 标准详解:C++98的技术修订版

C++03是C++98的技术修订版本,主要修正语言缺陷而非引入新特性。该标准澄清了容器成员函数的异常安全性、流状态处理、模板规则和初始化语法等100多处问题,增强了标准库规范,改善了与C99的兼容性,并统一了类型定义和名称查找规则。虽然变化细微,但C++03提高了语言的稳定性和可移植性,为后续C++11的重大更新奠定了基础。关键改进包括模板特化规则、值初始化语法和标准库头文件补充等。

C++发展史系列已完结,这段时间将会迎来系列作品——C++STL系列,敬请期待。作者邮箱:ljq20110324@outlook.com 684

C++98/C++03/C++11/C++14/C++17/C++20 标准帮助文档 2020-09-04

C++98/C++03/C++11/C++14/C++17/C++20 标准帮助文档,更新于 2020 年 9 月 4 日。docsets 格式,可使用 zeal 软件查看

HomeAssistant+HACS实战:5分钟搞定米家设备接入(附HomeKit配置技巧)

本文详细介绍了如何通过HomeAssistant和HACS插件商店快速接入米家设备,并分享HomeKit配置技巧。从HACS安装到米家设备接入,再到HomeKit设备集成,提供一站式智能家居解决方案,帮助用户实现设备统一管理和自动化场景设置。

weixin_29192141的博客 1052

C++ 98/03 应该学习哪些知识6

内存中的栈和堆分配

clayhell的博客 923

512分辨率万能遮罩模型实战指南:从下载到高精度应用

本文提供了512分辨率万能遮罩模型的完整实战指南。该模型经过超过540万次迭代,专门优化了对头发、手、眼睛等复杂区域的识别。文章详细介绍了从可靠渠道下载、环境部署、使用DF_ICE工具批量应用遮罩,到利用XSeg Editor进行高精度精修的全流程,旨在帮助用户显著提升AI换脸合成视频的质量与效率。

y2z3a4b5c的博客 1165

C++ 98/03 应该学习哪些知识16

RAII 与 pimpl 惯用法

clayhell的博客 1157

WRF-CHEM 新手向实践(四):化学初始/边界场及namelist设置

这是这个系列的最后一节了,这些经验是自己作为一个半路出家的外行一步步摸索出来的,其中不免有很多理解不到位的地方,但也正是如此,我相信这是目前新手入门wrf-chem最友好的教程之一,希望能对大家有实质性的帮助。本节继续未完成的内容。在mozbc生成化学初始和边界条件之前,还需要先在wrfinput文件中开启化学部分。

qq_42335815的博客 4638

自动驾驶大模型---小米&华科的ORION端到端方案

本文介绍了小米汽车与华中科技大学联合开发的ORION自动驾驶端到端方案。该框架创新性地将视觉语言模型(VLM)与自动驾驶系统结合,包含QT-Former特征提取模块、大语言模型(LLM)推理模块和生成式规划器三大核心组件。通过视觉感知与语言理解的深度融合,ORION能更准确地理解人类指令并生成合理轨迹,同时提升系统的可解释性。实验证明,该方案在准确性、泛化能力和决策透明度方面均有显著优势。ORION框架为自动驾驶技术提供了新思路,有望推动行业向更安全、智能的方向发展。

智能汽车人的博客 2005

C++ 98/03 应该学习哪些知识14

重载、重写和覆盖

clayhell的博客 1357

华为OD机试 - 矩形绘制 - 数组、坐标偏移(Python/JS/C/C++ 双机位C卷 100分)

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。实现一个简单的绘图模块,绘图模块仅支持矩形的绘制和擦除。 当新绘制的矩形与已有图形重叠时,对图形取并集; 当新擦除的矩形与已有图形重叠时,对图形取差集。 给定一系列绘制和擦除操作,计算最终图形的面积。第一行为操作数N,接下来的N行格式为:d x1

学Java,找哪吒 836

UTF8-CPP跨版本兼容性指南:从C++98到C++20的完整支持

UTF8-CPP是一个轻量级的C++库,专注于以可移植的方式提供UTF-8编码和解码功能,支持从C++98到C++20的全版本C++标准。无论是处理多语言文本还是确保跨平台字符编码一致性,这个库都能为开发者提供可靠的解决方案。 ## 为什么选择UTF8-CPP? 在C++开发中,字符编码处理常常是跨平台项目的痛点。UTF8-CPP通过模块化设计,为不同C++标准提供针对性实现,确保代码在各种编

gitblog_01046的博客 933

“守望先锋”网络同步分析

守望先锋”(Overwatch)是一款由暴雪娱乐开发的团队基础第一人称射击游戏(FPS),于2016年正式发布。游戏以其独特的角色设计、丰富的游戏模式和高度的团队合作性而受到广泛欢迎。类型:第一人称射击(FPS)/多人在线战斗竞技场(MOBA元素)平台玩家人数:每场比赛由两个六人队伍组成,共12名玩家。客户端/服务器模型:在这种模型中,客户端负责处理用户输入和表现逻辑,而服务器则负责游戏的核心逻辑和状态管理。客户端与服务器之间通过网络进行通信,确保游戏状态的一致性。强同步机制。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 429

QCC51XX---人机接口设备协议( HID)

QCC51XX---人机接口设备协议( HID)

weixin_42162924的博客 820

C++98/03版本知识点汇总

1.类只在代码中出现,不会在运行的程序中出现,即编译时出现;对象在运行的程序中出现,并占用内存,是运行的实体; 2.消息传递的实质是方法的调用; 3.面向对象最突出的特征是:封装性、继承性、多态性 封装:将数据结构和作用在数据结构上的操作组成一个实体,单位是对象,提供动态代码共享; 继承性:提供静态的代码共享; 多态性:不同的对象收到相同的消息产生多种不同的行为方式 编译时的多态性:通

忘世麒麟的专栏 3220

【YOLO11改进 - C3k2融合】C3k2融合动态蛇形卷积(Dynamic Snake Convolution)用于管状结构分割任务

【YOLO11改进 - C3k2融合】C3k2融合动态蛇形卷积(Dynamic Snake Convolution)用于管状结构分割任务

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 519

C发展史:K&R C/C89/C99/C11 以及 C++发展史: C++98/C++03/C++11

C语言的发展阶段 C语言之所以命名为C,是因为 C语言源自Ken Thompson发明的B语言,而 B语言则源自BCPL语言。 1967年,剑桥大学的Martin Richards对CPL语言进行了简化,于是产生了BCPL(Basic Combined Programming Language)语言。 20世纪60年代,美国AT&T公司贝尔实验室(AT&T Bell Labora

Invoker's Tower 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

C++98&C++11的区别

C++98&C++11的区别 文章目录C++98&C++11的区别1. C++11简介2. 自动类型推导auto3. 列表初始化4. 变量类型推导5. 范围for循环6. 返回类型后置语法7. final和override8. =default和=delete9. lambda表达式10. std::move11. std::array12. std::forward_list13...

wolfGuiDao的博客 9143

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【亲测免费】 UTF-CPP: C++ 中的UTF-8处理库指南

UTF-CPP: C++ 中的UTF-8处理库指南 项目介绍 UTF-CPP 是一款专为C++设计的轻量级库,专注于跨平台处理UTF-8编码的字符串。它适用于那些需要在C++应用程序中高效处理Unicode文本的场景,即便是在C++98标准下也能良好运行,同时保持向现代C++标准的兼容性。项目托管在 GitHub,为开发者提供了一套简洁的API,简化了UTF-8字符串的操作。 项目快速启动 环境准...

gitblog_00117的博客 1410

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

从 C 到 C++:告别面向过程,拥抱对象世界(C++98/03 入门指南)

private: // 私有成员,外部无法直接访问int age;public: // 公有接口void print() const { // const 成员函数,承诺不修改成员cout << "姓名: " << name << ", 年龄: " << age << ", 成绩: " << score << endl;stu.setName("张伟");return 0;structvsclass:在 C++ 中,struct默认成员是publicclass默认是。

xiangyun61的博客 213

C/C++的标准演进及对应的编译器

因为区别很小,因此,C89和C90通常指同一种语言,与传统C语言K&R标准对比, ANSI/ISO标准C语言的改进了很多。在1999年,C语言的标准化委员会将不断改进的C语言, 收纳为新的标准,官方名称为 ISO/IEC 9899: 1999,简称为 C99 标准,严格上讲是C语言的第二个官方版本,C99 标准引入了许多特性。在1995年,对C89标准作了一个修订与补充,产生了一个C95标准,官方名称为:ISO/IEC 9899:1990/AMD 1:1995,但并不是一个真正的标准,主要改动如下,

魔筝炼药师 1万+

终极指南:如何用UTF8-CPP在C++中轻松处理Unicode编码 [特殊字符]

UTF8-CPP是一个轻量级的C++库,专门用于在跨平台环境下处理UTF-8编码的Unicode字符串。这个头文件库让C++开发者能够以简单、高效的方式完成UTF-8、UTF-16、UTF-32之间的编码转换,同时保持与C++98标准的兼容性。 ## 为什么需要UTF8-CPP? 🤔 在当今全球化的软件开发环境中,处理多语言文本已成为基本需求。UTF-8编码作为Web和文件系统的标准,但在C

gitblog_01116的博客 411

探索UTF8-CPP:以可移植方式处理UTF-8编码的C++库

如果你是C++开发者,并且在寻找一种简单而可移植的方式来处理Unicode编码字符串,那么UTF8-CPP可能正是你需要的工具。这个小巧的C++98兼容的通用库专为处理UTF-8编码的字符串设计,对于熟悉STL算法和迭代器的开发人员来说,它将是一个自然的选择。自2006年首次发布以来,该库已在商业和开源项目中广泛使用并证明其稳定性和实用性。 ## 一、项目简介 UTF8-CPP是一个为了解决C...

gitblog_00084的博客 870

如何快速掌握UTF8-CPP:C++开发者必备的终极UTF-8编码处理指南

UTF8-CPP是一款专为C++开发者设计的高效UTF-8编码处理库,它以跨平台、轻量化的特性,让开发者能够轻松处理Unicode字符串。无论是在多语言应用开发还是文本数据处理中,这款库都能提供简洁可靠的解决方案,帮助开发者规避编码转换中的常见陷阱。 ## ???? 为什么选择UTF8-CPP?三大核心优势解析 ### ✅ 极致轻量化设计,零依赖集成 作为一款仅包含头文件的C++库,UTF8-C...

gitblog_00795的博客 960
上一篇: C++ 98/03 应该学习哪些知识7
下一篇: C++ 98/03 应该学习哪些知识9
五百五。
博客等级 码龄7年 249粉丝 177原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五百五。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值