类和对象 下

构造函数

初始化列表

构造函数是在构造类的时候给对象赋初值,并不是给类的成员函数初始化,赋值可以赋多次,而初始化只能初始化一次,这里我们引入初始化列表来对成员函数进行初始化

初始化列表,以冒号 :开始,接着以逗号 ,分隔开的成员列表,每个成员后面跟着一个放在括号中的初始值或者表达式

注意:

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

2.类中包含引用成员变量const成员变量自定义类型成员变量(且该类没有默认构造时),必须放在初始化列表初始化

3.尽量使用初始化列表初始化

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

explicit关键字

 构造函数不仅可以构造与初始化对象,对于单个参数或者除第一个参数无默认值其余均有默认值 的构造函数,还具有类型转换的作用 

1.内置类型对象 隐式转换成自定义类型对象
2.能支持这个转换,是有A的int单参数构造函数(支持传一个参数多参数带缺省也可以)支持
3.不想让隐式类型转换发生,构造函数加explicit

static成员

概念

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

特性

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

2.静态成员变量需要放在类外面进行定义,定义不需要加static

3.类静态成员可以用类::静态成员或者对象.静态成员来访问

4.静态成员函数没有this指针,不能访问任何非静态成员

5.静态成员也是成员,受访问限制符的限制

问题

1.静态成员函数可以调用非静态成员函数么

不可以

2.非静态成员函数可以调用静态成员函数么

可以

友元

友元提供了一种突破封装的方式,但是会增加耦合度,友元分为友元函数友元类

友元函数

友元函数是定义在内外部得普通函数,不属于任何类,无法访问类的私有成员,如果在类里面声明加上friend关键字,就可以访问类的成员

友元类

如图A 为date类的友元类

友元类的所有成员函数都可以时另一个类的友元函数,都可以访问另一个类的非公有成员

1.友元关系是单向的,没有交换性,a可以访问date,date不可以访问a

2.友元关系不可以传递

3.友元关系不能继承

内部类

概念

如果一个类定义在另一个类的内部,这个内部的类就叫做内部类,内部类是一个独立的类,它不属于外部类,外部类的对象无法访问内部类

内部类是外部类的友元

特性

1. 内部类可以定义在外部类的public、protected、private都是可以的

 2. 注意内部类可以直接访问外部类中的static成员,不需要外部类的对象/类名

 3. sizeof(外部类)=外部类,和内部类没有任何关系

匿名对象

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

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

相关文章

JavassmMYSQL宠物领养系统08465-计算机毕业设计项目选题推荐(附源码)

目 录 摘要 1 绪论 1.1课题背景及意义 1.2研究现状 1.3ssm框架介绍 1.3论文结构与章节安排 2 宠物领养系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 …

深入剖析:正则表达式的奥秘

简介 正则表达式(Regular Expressions)是一种强大的文本处理工具,一种用于匹配文本模式的字符串。它由特定的字符和操作符组成,用于定义一个搜索模式。这些搜索模式可以用于文本搜索、替换、验证和提取数据等多种用途。 以下是一…

火狐浏览器导入burpsuite CA 证书无法正常上网

当我们给火狐浏览器设置burpsuite代理,并给火狐导入了burpsuite的CA证书后,仍然无法上网的解决方法。 当我们把浏览器的代理配置好之后,浏览器导入证书,burpsuite设置好代理后,如上图,仍然无法上网&…

【后端开发】手写一个简单的线程池

半同步半异步线程池 半同步半异步线程池分为三层: 同步服务层 —— 处理来自上层的任务请求,将它们加入到排队层中等待处理。 同步排队层 —— 实际上是一个“同步队列”,允许多线程添加/取出任务,并保证线程安全。 异步服务层…

Nginx服务器安装证书并启用SSL(acme.sh)

前提 您已购置vps服务器,例如阿里云全球站ecs、AWS EC2、Azure VM、GCP Compute等安全组已开启80、443端口,且访问源设置为0.0.0.0/0域名已设置A记录指向当前操作服务器,若您使用aws ec2,有公有 IPv4 DNS,可供使用 安…

视频视觉效果制作After Effects 2023 MacOS中文

After Effects 2023是一款业界领先的动态图形和视觉特效软件。它提供了强大的工具集,帮助用户创建引人入胜的视觉效果、动态图形和电影级特效。新的版本带来了更快的渲染速度、增强的图像处理和优化的工作流程,使用户能够更高效地工作。无论您是在电影、…

阿里云域名实战

一、准备阿里云服务器,实现网站功能 (1)百度搜索阿里云 (2)登录阿里云 可以使用支付宝,淘宝账号登录 (3)点击控制台 (4)创建实例,购买云服务器 (5&#x…

SSH服务

目录 ​编辑 一、SSH服务基础知识 1、ssh服务介绍 2、ssh服务的配置文件路径 3、查看ssh服务的运行状态 二、SSH服务常用命令 - ssh 1、 SSH服务器 启动/关闭/重启 2、SSH远程连接语法 3、利用ssh协议传输文件和获取文件 4、SSH服务免密登陆 一、SSH服务基础知识 1、…

【Go 编程实践】从零到一:创建、测试并发布自己的 Go 库

为什么需要开发自己的 Go 库 在编程语言中,包(Package)和库(Library)是代码组织和复用的重要工具。在 Go 中,包是代码的基本组织单位,每个 Go 程序都由包构成。包的作用是帮助组织代码&#xf…

C#中LINQtoSQL只能在.NetFramework下使用,不能在.net 下使用

目录 一、在net7.0下无法实现LINQtoSQL 1.VS上建立数据库连接 2.VS上创建LINQtoSQL 二、在.NetFramework4.8下成功实现LINQtoSQL 1.VS上建立数据库连接 2.VS上创建LINQtoSQL 三、结论 四、理由 本文是个人观点,因为我百般努力在.net7.0下无法实现LINQtoSQL的…

【异常错误】Multiple top-level packages discovered in a flat-layout: [

今天在配置环境时,在运行代码: pip install -e . 出现了以下错误: 解决方案 在setup.py中显示加入一行 py_modules[],如: setup(namexxxx,versionx.x,py_modules[], ) 再次运行pip指令安装即可解决。 error: Mul…

分析报告有样板了-奥威BI数据可视化报表模板

述职报告、月度数据分析报告、季度数据分析报告、区域数据分析报告……人在职场,数据分析报告少不了。那么,怎么才能在极短的时间内做出一张既好看又突出重点、分析逻辑在线的数据可视化分析报表?奥威BI软件的建议是采用BI数据可视化报表模板…