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

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

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

相关推荐
无尽的大道3 分钟前
Java字符串深度解析:String的实现、常量池与性能优化
java·开发语言·性能优化
爱吃生蚝的于勒6 分钟前
深入学习指针(5)!!!!!!!!!!!!!!!
c语言·开发语言·数据结构·学习·计算机网络·算法
羊小猪~~10 分钟前
数据结构C语言描述2(图文结合)--有头单链表,无头单链表(两种方法),链表反转、有序链表构建、排序等操作,考研可看
c语言·数据结构·c++·考研·算法·链表·visual studio
binishuaio16 分钟前
Java 第11天 (git版本控制器基础用法)
java·开发语言·git
zz.YE17 分钟前
【Java SE】StringBuffer
java·开发语言
就是有点傻22 分钟前
WPF中的依赖属性
开发语言·wpf
洋24030 分钟前
C语言常用标准库函数
c语言·开发语言
进击的六角龙32 分钟前
Python中处理Excel的基本概念(如工作簿、工作表等)
开发语言·python·excel
wrx繁星点点33 分钟前
状态模式(State Pattern)详解
java·开发语言·ui·设计模式·状态模式
NoneCoder1 小时前
Java企业级开发系列(1)
java·开发语言·spring·团队开发·开发