C嘎嘎类与对象拓展

本篇文章是对浅谈C嘎嘎类与对象的拓展

初始化列表(初始化)

格式:类名(类型 形参1, 类型 形参2)

:(冒号) 变量【类中声明的变量】(形参1)

, 变量【类中声明的变量】(形参2)//当然这里除了可以放变量外也可以是表达式

{}

例子:

class Date

{

public :

Date(int year, int month, int day)

: _year = year

, _month = month

, _day = day

{}

private:

int _year;

int _month;

int _day;

};

以上例子中的是可以放在初始化列表,也可以不放在初始化列表里,当然有一部分必须要放在初始化列表的中初始化的

必须放在初始化列表初始化的变量

  1. 引用成员变量

  2. const成员变量

  3. 没有默认构造的类类型变量

那么什么是默认构造

这是我先前没有总结过的一个点,那么现在补上

以上三个构造函数就是默认构造函数,因此大家可别不认识哈,当然啦初始化尽量走初始化列表

当然,有的书上会这么写,但是大家注意这里不是定义还是声明,并且这个1是缺省值,是给初始化列表使用

那么这里还有一点需要注意的是这里的初始化不会根据初始化列表的的排序进行初始化,而是根据private部分中的声明顺序来初始化

static静态符

  1. ⽤static修饰的成员变量,称之为静态成员变量,静态成员变量⼀定要在类外进⾏初始化

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

  3. ⽤static修饰的成员函数,称之为静态成员函数,静态成员函数没有this指针。

  4. 静态成员函数中可以访问其他的静态成员,但是不能访问⾮静态的,因为没有this指针。

  5. 如果嵌套了结构体的情况,嵌套的结构体成员对⻬到⾃⼰的成员中最⼤对⻬数的整数倍处,结构 体的整体⼤⼩就是所有最⼤对⻬数(含嵌套结构体中成员的对⻬数)的整数倍

  6. ⾮静态的成员函数,可以访问任意的静态成员变量和静态成员函数

  7. 突破类域就可以访问静态成员,可以通过类名::静态成员或者对象.静态成员来访问静态成员变量 和静态成员函数

注意:静态成员变量需要在类外进行初始化

那么大家来看看这道题

我们先看第一问构造函数的调用顺序:

首先c是全局变量,且c变量的创建在main函数之前,因此初始化必然先从变量c开始,在c初始化完成后main函数就建立了,那么a和b则是根据定义的顺序来初始化。d是静态变量,而初始化d则必须要程序运行到静态变量处才能初始化。

因此答案是c a b d

那么我们来看看第二问析构函数的顺序:

首先析构函数需要从局部变量开始析构,而析构的原有顺序是后定义的变量先析构,因此只有选项abc符合要求,静态变量(d)的生命周期是全局的,并且静态变量d处于局部,因此先析构d,析构完d后再析构c

因此答案是 b a d c

小总结:

  1. 全局变量优先初始化,静态变量的初始化需要程序运行到静态变量的位置后才能初始化

  2. 析构的顺序后定义的先析构

3.. 静态变量的生命周期是全局

4.处于局部的静态变量优先析构

匿名对象

顾名思义就是没有名字的对象,我们先来看一下有名字的对象

有名字的对象

A hanfei();

A是类 类型 hanfei就是对象名

匿名对象

A();

注意:匿名对象的生命周期很短,只有它所在的那一行,但是它也有续命的方法,这个我们后续介绍。

那么今天内容就先到这里,想知道后面内容的童鞋可以给我点个关注,我们下期见。

相关推荐
June`4 分钟前
高并发网络框架:Reactor模式深度解析
linux·服务器·c++
小镇敲码人15 分钟前
剖析CANN框架中Samples仓库:从示例到实战的AI开发指南
c++·人工智能·python·华为·acl·cann
萧鼎16 分钟前
Python 包管理的“超音速”革命:全面上手 uv 工具链
开发语言·python·uv
Anastasiozzzz1 小时前
Java Lambda 揭秘:从匿名内部类到底层原理的深度解析
java·开发语言
刘琦沛在进步1 小时前
【C / C++】引用和函数重载的介绍
c语言·开发语言·c++
机器视觉的发动机1 小时前
AI算力中心的能耗挑战与未来破局之路
开发语言·人工智能·自动化·视觉检测·机器视觉
HyperAI超神经1 小时前
在线教程|DeepSeek-OCR 2公式/表格解析同步改善,以低视觉token成本实现近4%的性能跃迁
开发语言·人工智能·深度学习·神经网络·机器学习·ocr·创业创新
R_.L1 小时前
【QT】常用控件(按钮类控件、显示类控件、输入类控件、多元素控件、容器类控件、布局管理器)
开发语言·qt
Zach_yuan1 小时前
自定义协议:实现网络计算器
linux·服务器·开发语言·网络
我在人间贩卖青春1 小时前
C++之this指针
c++·this