当前位置: 首页 > ai >正文

c加加重点学习之day03

------------------------------------------------类的学习---------------------------------------------------

1.c加加中对结构体是有增强的 体现如下

2. 那我们思考一个问题 既然在增强之后的结构体完全可以满足类的功能 我们为什么要引入类这个概念 为什么不直接使用结构体?

答:区别主要体现在默认访问权限上,struct的成员默认访问权限是public, class的成员默认访问权限是private

3.类的定义:

成员变量:用来描述一个对象的属性信息 ,与一般的变量声明相同,但需要将它存放在类的声明体中

成员函数:*用来描述一个对象的行为动作 ,与一般的函数声明相同,但需要将它存放在类的声明体中
*在类中说明函数原型,在类外给出函数体实现 ,并在函数名前使用 类名:: 加以限定

*也可以直接在类中给出函数体,形成内联成员函数

*允许声明重载函数和带默认值参数的函数

4.权限问题:public(公有成员) , 类的成员函数以及该类定义的对象都能够访问这些公有成员private(私有成员),只能被类的成员函数直接访问, 类外定义的对象不可以直接访问

protected(保护成员) , 只能被该类的成员函数和其派生类的成员函数访问

tips:如果你尝试在类的外部直接访问或修改私有成员变量,编译器会报错,因为它违反了封装原则,即类的内部实现细节(如私有成员)应该被隐藏起来,只通过公共接口(如公有成员函数)与外部交互

---------------------------------------------------在不同区域创建对象-----------------------------------------

1.在栈区中开辟我们的对象:在main中直接去定义一个 该对象就是在栈区中开辟的对象

2.在静态区中去开辟:用类在函数外声明一个全局变量并且用static进行修饰

3.在栈区中开辟我们的对象

----------------------------------------------------this指针--------------------------------------------

1.思考:为什么我们在上一个函数中改变我们的time的数值的时候 我们的参数会帮我们找到对应的成员?

答:我们的c加加会自动创建一个this指针 来指向我们的成员

------------------------------------------------------------构造函数-------------------------------------------------

1.定义:构造函数是一个 特殊的成员函数 , 名字和类名相同 , 没有返回值,创建类类型对象时,自动调用 ,在对象的生命周期内只能调用一次 , 保证每个数据成员都有一个合适的初始值。

其最主要的作用就是初始化我们的类变量

---------------------------------------------------------析构函数------------------------------------------------------------

1.定义:析构函数是一个特殊的成员函数, 名字和类名相似(~类名) , 没有返回值,对象销毁的时候,自动调用 ,在对象的生命周期内只能调用一次,保证每个对象的资源都能释放掉。

2.特点:析构函数函数名是 在类名前面加上字符~

无参数无返回值(但有this指针)

一个类有且只有一个析构函数,所以肯定不能重载

如果没有手动添加析构函数, 编译器会根据需要提供一个默认的析构函数对象生命周期结束时,自动调用析构函数

析构函数不能用const修饰

--------------------------------------------------拷贝构造函数--------------------------------------------------------

思考:为什么会出现double free的情况呢?

答:

解决方法 定义一个深拷贝 并且补齐其功能:

1.定义:拷贝构造函数是一种特殊的构造函数, 它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。

2.格式:类名(const 类名 &引用);

3.浅拷贝

4.深拷贝

为其重新开辟内存

-------------------------------------------------------static-----------------------------------------------------------

static在c语言中主要起一个延长生命周期的作用

static修饰成员变量:1.静态成员函数:当一个类的成员变量用 “static” 关键字修饰的时候, 这个成员变量称为静态成员变量

2.静态成员变量特点:静态成员变量属于类,只要类存在,静态成员变量就存在

同一类的所有对象共享静态成员变量

静态成员变量必须在类外进行初始化

静态成员变量可以直接通过类名访问(也可以通过对象进行访问)

3.static修饰成员函数

1.当一个类的成员函数用 “static” 关键字修饰的时候,这个成员函数称为 静态成员函数

2.特点:静态成员函数没有"this"指针 ,所以 静态成员函数不能直接访问非静态成员变量、函数

静态成员函数可以 通过类名直接访问

------------------------------------------------friend友元-----------------------------------------------------


1.介绍:为什么要引入则友元这个概念呢?

类的私有成员只能被类的成员函数直接访问,类外函数是无法直接访问的。

虽然我们可以通过添加公有函数接口来间接访问私有成员,但是这样做会导致代码的运行效率降低。

友元就是在类中直接声明要访问私有成员的外部函数或外部类为该类的友元成员 ,这样外部函数或外部类就可以访问该类的私有成员了。

2.友元函数

把类外的一个普通函数声明为类的友元函数,这样这个外部函数就可以访问类的私有成员了

2.友元成员函数

把类A的一个成员函数声明为类B的友元函数,这样这个类A的成员函数就可以访问类B的私有成员了。

3.友元类

把类A声明为类B的友元类,这样这个类A的所有成员函数都可以访问类B的私有成员了

总结:友元不具有相互性,只具有单项性

友元不能被继承,友元不具有传递性

http://www.xdnf.cn/news/256.html

相关文章:

  • 仿腾讯会议项目开发——网络嵌入
  • 软件测试之接口测试详解
  • 开源AI守护每一杯------奶茶咖啡店视频安全系统的未来之力
  • SQL-子查询
  • iPaaS应用集成平台在交通运输行业有哪些应用场景
  • (51单片机)LCD显示数据存储(DS1302时钟模块教学)(LCD1602教程)(独立按键教程)(延时函数教程)(I2C总线认识)(AT24C02认识)
  • 643SJBHflash个人网站
  • 【Python爬虫基础篇】--2.模块解析
  • AI时代的泛安全新范式:Kaamel安全智能体解决方案
  • 数据库被渗透怎么办?WAF能解决数据库安全问题吗?
  • 织梦DedeCMS首页列表页调用会员信息的SQL标签
  • 2025年人工智能指数报告(斯坦福)重点整理
  • 静态时序分析STA——8.2 时序检查(保持时间检查)
  • 第十四节:实战场景-何实现全局状态管理?
  • 【python】编码、输入、数据类型
  • CCF CSP 第36次(2024.12)(2_梦境巡查_C++)
  • 本地部署ai图片转生成视频,一键运行包的制作教程。
  • 调制器的噪声传递函数(NTF)的零极点配置对其性能的影响
  • L38.【LeetCode题解】四数之和(双指针思想) 从汇编角度分析报错原因
  • C++11中的std::condition_variable
  • 深度学习中的概念——元素积(哈达玛积)
  • Skipped breakpoint at ... because of stepping in another thread问题分析
  • 制造企业PLM深度应用:2025年基于PDCA循环的7项持续改进指标
  • 2025年Q2(桥式)起重机司机题库考试精选题
  • 高级java每日一道面试题-2025年4月13日-微服务篇[Nacos篇]-Nacos如何处理网络分区情况下的服务可用性问题?
  • AI的出现,是否能替代IT从业者?
  • 电子电器架构 --- OEM企标中规定ECU启动时间的目的
  • 第七篇:系统分析师第三遍——1、2章
  • 【Spring Boot】把jar包导入本地系统
  • C#获取当前方法的命名空间、类名称、方法名称以及方法的参数信息