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

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

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

相关推荐
always_TT10 分钟前
C语言中的字符与字符串(char数组)
c语言·开发语言
forAllforMe30 分钟前
LAN9252 从机寄存器配置--C语言举例
c语言·开发语言
weixin_5375904541 分钟前
《C程序设计语言》练习答案(练习1-4)
c语言·开发语言
chushiyunen1 小时前
python中的内置属性 todo
开发语言·javascript·python
麦麦鸡腿堡1 小时前
JavaWeb_请求参数,设置响应数据,分层解耦
java·开发语言·前端
2301_819414301 小时前
C++与区块链智能合约
开发语言·c++·算法
不想看见4042 小时前
Valid Parentheses栈和队列--力扣101算法题解笔记
开发语言·数据结构·c++
炸膛坦客2 小时前
单片机/C/C++八股:(十五)内存对齐、结构体内存对齐
c语言·开发语言·单片机
老约家的可汗2 小时前
C/C++内存管理探秘:从内存分布到new/delete的底层原理
c语言·c++
娇娇yyyyyy2 小时前
QT编程(13): Qt 事件机制eventfilter
开发语言·qt