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();

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

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

相关推荐
宠..几秒前
下拉列表框事件绑定
开发语言·qt·microsoft
Tairitsu_H2 分钟前
C++:优先队列的模拟实现
开发语言·c++·stl·优先队列
AI人工智能+电脑小能手2 分钟前
【大白话说Java面试题 第48题】【JVM篇】第8题:JVM 里的有几种 ClassLoader?为什么会有多种?
java·开发语言·jvm·面试
wjs20245 分钟前
SQLite Having 子句详解
开发语言
lzh2004091911 分钟前
效率与安全并重:C++ 线程安全
linux·c++
AIBox36512 分钟前
Claude 中转站怎么接入:2026 年国内调用 Claude API 的方法、能力与示例
服务器·开发语言·人工智能·gpt·php·python3.11
Shan120514 分钟前
RAII妙用:使用标准库的包装器
开发语言·c++
才疏学浅74316 分钟前
批量下载鹏程实验室数据的方法
java·开发语言·word
Hua-Jay20 分钟前
OpenCV联合C++/Qt 学习笔记(十八)----二维码检测及积分图像
c++·笔记·qt·opencv·学习
皮卡祺q23 分钟前
【JVM】:类加载机制,jvm内存布局,垃圾回收,String 不可变性源码分析
java·开发语言·jvm·多线程·string