类和对象(3)——最终篇

一、static成员

在C语言的学习中,我们就已经见识过这个关键字了,一般的程序的代码储存在栈中,而static修饰的代码放在静态区中。现在,我们的static可以修饰类中的成员变量,会发生怎样的变化呢?

1.1概念

声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量;
用static修饰的成员函数,称之为静态成员函数。

1.2特性

1.静态成员为所有类对象所共享,不属于某个具体的对象,存放在静态区

2.静态成员变量必须在类外定义,定义时不添加static关键字,类中只是声明:
3. 类静态成员即可用 [类名::静态成员] 或者 [对象.静态成员] 来访问,前提是该静态成员公有:

但为了类的封装性,访问私有静态成员时仍使用函数接口访问:4. 静态成员也是类的成员,受public、protected、private 访问限定符的限制。
5. 静态成员函数没有隐藏的this指针,不能访问任何非静态成员:

二、友元

友元提供了一种突破封装的方式,有时提供了便利。
但是友元会增加耦合度,破坏了封装,所以友元不宜多用。
友元分为友元类和友元函数。

2.1友元类

假设我们要设置两个类,TV电视机和Remote遥控器,我们想操控电视机的频道、声音等数据,我们直接在TV类中设置类似函数好像不合情理,而在Remote类中设置就正常多了,但是TV类中的都是私有数据,Remote类怎么能打破这一特性呢?答案是使用友元类。

友元类的特性:
1.友元关系是单向的,不具有交换性。(电视无法操纵遥控器)
2.友元关系不能传递,如果C是B的友元, B是A的友元,则不能说明C时A的友元。(遥控器是电视的友元,插座也是电视的友元,但是遥控器不能操控插座,反之亦然)
3.友元关系不能继承。(同一个遥控器能操控一代电视,但不能操控二代电视)

2.2友元函数

友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数不属于任何类,但需要在类的内部声明,声明时需要加friend关键字。

1.友元函数可访问类的私有和保护成员,但不是类的成员函数
2.友元函数不能用const修饰
3.友元函数可以在类定义的任何地方声明,不受类访问限定符限制

2.3内部类

概念:
如果一个类定义在另一个类的内部,这个内部类就叫做内部类。内部类是一个独立的类,它不属于外部类,更不能通过外部类的对象去访问内部类的成员。外部类对内部类没有任何优越的访问权限
注意:
内部类就是外部类的友元类,内部类可以通过外部类的对象参数来访问外部类中的所有成员。但是外部类不是内部类的友元。
特性:
1. 内部类可以定义在外部类的public、protected、private。
2. 注意内部类可以直接访问外部类中的static成员,不需要外部类的对象/类名。
3. sizeof(外部类)=外部类,和内部类没有任何关系。

三、匿名对象

语法:[类名()]
特性:其生命周期只有一行,下一行时就会自动调用析构函数。

希望大家从下面的代码与其执行结果中看出匿名对象的生命周期:

class Date
{
public:Date(int year = 2024, int month = 2, int day = 29):_year(year),_month(month),_day(day) {cout << "Hi:";PrintDate();}void PrintDate(){cout << _year << "." << _month << "." << _day << endl;}~Date(){cout << "Bye~:";PrintDate();}
private:int _year = 2024;int _month = 2;int _day = 29;
};
int main()
{Date();Date d1(2024, 3, 1);Date d2(2024, 3, 2);return 0;
}

运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/502879.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法,排序

算法 解决某个实际问题的过程和方法&#xff01; 学习算法&#xff1a; 1、先搞清楚算法的流程 2、直接去推敲如何写代码 排序算法 冒泡排序 每次从数组中找出最大值放在数组的后面去。 package algorithm;import java.util.Arrays;public class Test1 {public static …

【Java项目介绍和界面搭建】拼图小游戏——添加图片

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏 …

elementUI el-table中的对齐问题

用elementUI时&#xff0c;遇到了一个无法对齐的问题&#xff1a;代码如下&#xff1a; <el-table :data"form.dataList" <el-table-column label"验收结论" prop"checkResult" width"200"> <template slot-sco…

机器人与AGI会撞出什么火花?

真正的科技变革是不是就要来临了&#xff1f;各方大佬都开始布局机器人&#xff0c;对于普通人的就业会造成什么影响&#xff1f; ​ 优牛企讯-企业动态信息监控专家 在优牛企讯-企业动态监控专家搜索可知&#xff0c;全国目前的机器人公司已经达到了26401家&#xff0c;近一年…

WSL2内存管理

1 限制WSL2内存使用 2.1 在Windows资源管理器路径框输入%UserProfile%跳转到当前用户路径 2.2 在当前用户路径下新建.wslconfig文件&#xff0c;内容&#xff1a; [wsl2] processors8 memory8GB swap8GB localhostForwardingtrue 2.3 重启WSL 2 定期清理缓存 sudo crontab -e -…

表单验证、属性绑定(一个属性根据另一个属性有无进行操作)

表单验证 一个属性根据另一个属性有无进行操作&#xff08;属性绑定&#xff09; 1、问题描述 ​ 需求&#xff1a;表单里面后两个属性需要根据前面一个属性进行有无判断。如果前面属性没有输入值&#xff0c;则不需要进行操作&#xff1b;如果前面属性有输入值&#xff0c;则…

基于centos的linux上docker安装,及mysql、redis等应用在docker容器中的安装

Docker环境安装 安装yum-utils&#xff1a; yum install ‐y yum‐utils device‐mapper‐persistent‐data lvm2为yum源添加docker仓库位置&#xff1a; yum‐config‐manager ‐‐add‐repo https://download.docker.com/linux/centos/docker‐ce.repo如果上面执行命令后…

【Educoder数据挖掘实训】异常值检测-箱线图

【Educoder数据挖掘实训】异常值检测-箱线图 开挖&#xff01; 关于箱线图&#xff0c;核心理念就是找出上四分位数和下四分位数&#xff0c;定义二者的差为 I Q R IQR IQR。上下四分位数分别向上下扩展 1.5 I Q R 1.5IQR 1.5IQR定义为上界和下界&#xff0c;在此之外的数据被…

前端导出word文件的多种方式、前端导出excel文件

文章目录 纯前借助word模板端导出word文件 &#xff08;推荐&#xff09;使用模板导出 前端通过模板字符串导出word文件前端导出 excel文件&#xff0c;node-xlsx导出文件&#xff0c;行列合并 纯前借助word模板端导出word文件 &#xff08;推荐&#xff09; 先看效果&#xf…

森林灭火利器|便携式森林消防灭火泵|恒峰智慧科技

随着人们对环境保护意识的不断提高&#xff0c;森林防火工作显得尤为重要。然而&#xff0c;传统的森林灭火方式存在诸多不便&#xff0c;如火势蔓延迅速、灭火效率低下等。为了更好地保护森林资源&#xff0c;科学家们研发出了一种便携式森林消防灭火泵&#xff0c;它的出现为…

git安装4.3

一、git的安装 1、下载git包 下载git包url&#xff1a;https://git-scm.com/download/win 下载包分为&#xff1a;64位和32位 2、点击安装包 2、选择安装路径 3、 点击下一步 4、点击next 5、点击next 6、点击next 7、 8、 9、 10、 11、 12、在桌面空白处&#xff0c;右键…

零成本建站方案之Github Pages

之前的文章中介绍了如何申请AWS免费服务器并使用WordPress来搭建个人网站&#xff0c;今天给大家介绍一种无需任何硬件资源&#xff0c;也就是不需要准备服务器就可以搭建一个网站的方案&#xff0c;那就是使用github pages来搭建一个静态网站。 第一步&#xff0c;需要准备一个…