c++的学习之路:7、类和对象(3)

一、初始化列表

初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括号中的初始值或表达式,如下方代码就是初始化列表的方式。从图片可以看出这种方式也可以利用缺省初始化。

class Date
{
public:
    Date(int year=1, int month=1, int day=1)
        : _year(year)
        , _month(month)
        , _day(day)
    {}
private:
    int _year;
    int _month;
    int _day;
};

int main()
{
    Date d1;
    Date d2(2024, 4, 2);
    return 0;
}

注意:
1. 每个成员变量在初始化列表中只能出现一次(初始化只能初始化一次)

2. 类中包含以下成员,必须放在初始化列表位置进行初始化:引用成员变量、const成员变量、自定义类型成员(且该类没有默认构造函数时)

3. 尽量使用初始化列表初始化,因为不管你是否使用初始化列表,对于自定义类型成员变量,一定会先使用初始化列表初始化。

4. 成员变量在类中声明次序就是其在初始化列表中的初始化顺序,与其在初始化列表中的先后次序无关

二、static成员

声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量;用
static修饰的成员函数,称之为静态成员函数。静态成员变量一定要在类外进行初始化

特性:

1. 静态成员为所有类对象所共享,不属于某个具体的对象,存放在静态区
2. 静态成员变量必须在类外定义,定义时不添加static关键字,类中只是声明
3. 类静态成员即可用 类名::静态成员 或者 对象.静态成员 来访问
4. 静态成员函数没有隐藏的this指针,不能访问任何非静态成员
5. 静态成员也是类的成员,受public、protected、private 访问限定符的限制

三、友元

友元提供了一种突破封装的方式,有时提供了便利。但是友元会增加耦合度,破坏了封装,所以
友元不宜多用。友元分为:友元函数和友元类,友元函数可访问类的私有和保护成员,但不是类的成员函数,友元函数不能用const修饰,友元函数可以在类定义的任何地方声明,不受类访问限定符限制,一个函数可以是多个类的友元函数,友元函数的调用与普通函数的调用原理相同

如下方代码所示,图1是下方代码所示,也就是利用友元函数就可以访问class的私人变量了,如果不用友元函数时就如图2就看访问不到了,这个就是友元函数的用法,友元类也是这样的使用。

 

class Date
{
public:
    friend void Print(Date d);
    Date(int year=1, int month=1, int day=1)
        : _year(year)
        , _month(month)
        , _day(day)
    {}
private:
    int _year;
    int _month;
    int _day;
};

void Print(Date d)
{
    cout << d._year << '/' << d._month << '/' << d._day << endl;
}

int main()
{
    Date d1;
    Date d2(2024, 4, 2);
    Print(d1);
    Print(d2);
    return 0;
}

四、内部类

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

这个怎么说有点像嵌套,代码实现如下,这个B就是A天生的友元。

class A
{
public:
    class B
    {
    public:
        void print(const A& a)
        {
            cout << _b << ' ' <<a._a << endl;
        }
    private:
        int _b=20;
    };
private:
    int _a=10;
};
 

五、匿名对象

匿名对象就是不用定义变量名的,如下方代码,这个A()就是创建了一个匿名对象,这个匿名的对象只存在一行,在下一行就会调用析构函数。

int main()
{
    A();
    return 0;
}

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

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

相关文章

rs485自动收发电路

R/RO&#xff1a;receive/receive out&#xff0c;接收&#xff0c;连接单片机的 rx D/DI&#xff1a;drive/drive in&#xff0c;驱动&#xff0c;连接单片机的 tx 自动控制电路的目的就是在 tx 空闲&#xff08;空闲为高并&#xff09;时拉低 RE 和 DE&#xff0c;工作&…

紫光展锐P7885核心板详细参数介绍_5G安卓智能模块开发方案

紫光展锐P7885核心板采用了先进的6nm EUV制程工艺&#xff0c;集成了高性能的应用处理器和金融级安全解决方案&#xff0c;为用户带来了全新的性能体验。 P7885核心板搭载了先进的6nm制程工艺SoC P7885&#xff0c;其中包含四核A76和四核A55&#xff0c;主频可达2.7Ghz&#xf…

每天五分钟计算机视觉:使用神经网络完成人脸的特征点检测

本文重点 我们上一节课程中学习了如何利用神经网络对图片中的对象进行定位,也就是通过输出四个参数值bx、by、bℎ和bw给出图片中对象的边界框。 本节课程我们学习特征点的检测,神经网络可以通过输出图片中对象的特征点的(x,y)坐标来实现对目标特征的识别,我们看几个例子。…

Laya1.8.4 UI长按选择对应位置释放技能

需求&#xff1a; 需要实现拖拽摇杆选择技能释放位置&#xff0c;释放技能。 原理&#xff1a;首先拆分需求&#xff0c;分为两部分&#xff0c;UI部分和场景部分&#xff0c;UI部分需要实现长按效果&#xff0c;长按后又要有拖动效果&#xff0c;将官方文档的示例代码改了改…

k8s笔记28--快速在ubuntu上基于二进制和源码安装containerd

k8s笔记28--快速在ubuntu上基于二进制和源码安装containerd 介绍containerd 安装方法二进制文件安装源码构建安装 注意事项说明 介绍 Containerd是一个工业标准的容器运行时&#xff0c;它强调简单、健壮和可移植性。它可作为Linux和Windows的守护进程&#xff0c;能管理主机系…

[人工智能] AI为农业赋能:智能灌溉系统

前言 人工智能&#xff08;AI&#xff09;在农业方面具有广泛的应用前景&#xff0c;这主要得益于其在数据处理、预测分析和决策优化等方面的优势。 农业生产涉及到大量的数据&#xff0c;包括土壤湿度、气温、降雨量、植物生长情况等。人工智能可以利用先进的数据处理技术&…

设计模式之工厂方法模式精讲

工厂方法模式又叫虚拟构造函数&#xff08;Virtual Constructor&#xff09;模式或者多态性工厂&#xff08;Polymorphic Factory&#xff09;模式。工厂方法模式的用意是定义一个创建产品对象的工厂接口&#xff0c;将实际创建性工作推迟到子类中。 工厂模式可以分为简单工厂…

IMU参数辨识及标定

IMU参数辨识及标定 一、标定参数分析 标定的本质是参数辨识。首先明确哪些参数可辨识&#xff0c;其次弄清怎样辨识。 参数包括陀螺仪和加速度计各自的零偏、标度因数、安装误差。 IMU需要标定的参数主要是确定性误差和随机误差&#xff0c;确定性误差主要标定bias&#xff0…

C++刷题篇——04找等值元素

一、题目 二、解题思路 1、分割后放进二维数组 2、使用map&#xff0c;key为数值&#xff0c;value为其坐标 3、遍历二维数组元素&#xff0c;再在map中找该元素对应的value值&#xff08;二维数组形式&#xff09;&#xff0c;倘若value.size为1&#xff0c;那直接返回-1&…

2024阿里云服务器ECS u1实例性能测评_CPU内存_网络_存储

阿里云服务器u1是通用算力型云服务器&#xff0c;CPU采用2.5 GHz主频的Intel(R) Xeon(R) Platinum处理器&#xff0c;ECS通用算力型u1云服务器不适用于游戏和高频交易等需要极致性能的应用场景及对业务性能一致性有强诉求的应用场景(比如业务HA场景主备机需要性能一致)&#xf…

PostgreSql 01 安装,创建用户,创建数据库,创建关系

01.安装postgresql postgreSql 是在linux上 去官网找按照的方式 选择好postgreSql 的版本&#xff0c;已经Linux的发行版本 拿到命令&#xff0c;直接扔到Linux中运行即可 # 下载PGSQL的rpm包 sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpm…

如何一键展示全平台信息?Python手把手教你搭建自己的自媒体展示平台

前言 灵感源于之前写过的Github中Readme.md中可以插入自己的js图片和动态api解析模块&#xff0c;在展示方面十分的美观&#xff1a; 这方面原理可以简化为&#xff0c;在Markdown中&#xff0c;你可以使用HTML标签来添加图像&#xff0c;就像这样&#xff1a; <tr><…

低噪声、轨至轨运算放大器芯片—— D721、D722、D724,适合用于音频领域

应用领域 D721、D722、D724是我们推荐的三款低噪声、轨至轨运算放大器芯片&#xff0c;其中D721为单运放&#xff0c;D722为双运放&#xff0c;D724为四运放。适合用于音频领域、传感器等的信号放大处理&#xff0c;比如K歌宝、音响、测距、滤波器、AD转换器前级信号处理等等。…

亚信安慧AntDB:激荡数据浪潮,塑造智能新纪元

亚信安慧AntDB一直秉承着“技术生态”的理念&#xff0c;不断进行技术创新和功能增强&#xff0c;以保持与先进数据库系统的竞争力。作为一款致力于提升数据库处理性能和稳定性的系统&#xff0c;AntDB在技术上始终保持敏锐的洞察力&#xff0c;不断汲取国内外先进技术的精华&a…

大模型之路2:继续趟一条小路

继续趟一条小路&#xff0c;可谓是充满了曲折&#xff0c;当然&#xff0c;必不可少的还是坑。 吐槽 看过的喷友&#xff0c;其实你看完以后&#xff0c;大概率也就是和我一起骂骂街&#xff0c;因为....我也的确没理清楚。 我也不知道做错了什么&#xff0c;就是运行不过去…

【讲解下Gitea】

&#x1f308;个人主页:程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

使用plasmo开发浏览器插件在网页指定位置添加自定义UI

使用plasmo开发浏览器插件的时候&#xff0c;有时候需要在指定网站的指定页面添加自定义的UI内容&#xff0c;如果通过content.js内容脚本去通过js创建的话&#xff0c;可就太麻烦了&#xff0c;要写不少的js代码。不过plasmo已经帮我们实现了这个功能&#xff0c;就是Content …

【CAD建模号】学习笔记(一)

一、概述 CAD建模号是一款用于在智能手机及平板电脑等移动设备上进行三维建模的app&#xff0c;最初发布于2019年。 二、基本操作 手指直接点按&#xff0c;拖动来粗略创建和操作对象&#xff1b;双指缩放视图&#xff0c;双指移动视图。手指长按屏幕&#xff0c;出现红色小…

css-盒子阴影

1.box-shadow: 10px 20px 10px 10px blue; 参数对应顺序&#xff1a;上下&#xff0c;左右 &#xff0c;模糊程度&#xff0c;颜色 &#xff0c;阴影大小 2.box-shadow: 10px 20px 10px 20px blue,-10px -20px 10px 50px red; 负号就是相反方向 支持多个阴影 在后面加逗号 3…

汽车充电桩主板购买渠道汇总

随着充电桩设施的迅速普及&#xff0c;充电桩作为其中关键组件之一&#xff0c;市场需求不断增长。在互联网科技飞速发展的背景下&#xff0c;充电桩主板的采购渠道更加多元化&#xff0c;下面我们来探讨消费者、充电桩运营商和生产商可以从何处购买充电桩主板。 直接联系制造商…