类和对象 下

构造函数

初始化列表

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

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

注意:

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(外部类)=外部类,和内部类没有任何关系

匿名对象

相关推荐
汉字萌萌哒1 分钟前
【2022 CCF 非专业级别软件能力认证第一轮(CSP-J1)入门级 C++语言试题及解析】
数据结构·c++·算法
th新港2 分钟前
CCF201909_1
数据结构·c++·算法·ccf
意如流水任东西3 分钟前
[C++]类和对象(上)
开发语言·c++
清纯世纪8 分钟前
基于深度学习的图像分类或识别系统(含全套项目+PyQt5界面)
开发语言·python·深度学习
孤寂大仙v8 分钟前
【C++】STL----stack和queue常见用法
开发语言·c++
孤华暗香13 分钟前
Python快速入门 —— 第三节:类与对象
开发语言·python
一丝晨光27 分钟前
逻辑运算符
java·c++·python·kotlin·c#·c·逻辑运算符
元气代码鼠28 分钟前
C语言程序设计(进阶)
c语言·开发语言·算法
霍霍哈嗨41 分钟前
【QT基础】创建项目&项目代码解释
开发语言·qt
friklogff42 分钟前
【C#生态园】从图像到视觉:Emgu.CV、AForge.NET、OpenCvSharp 全面解析
开发语言·c#·.net