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

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

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

相关推荐
mhmh1234 分钟前
Python 对象模型与数据模型:魔术方法、描述符与元类深度解析
开发语言·python
估值探索者10 分钟前
【Python量化策略实战 #02】多因子合成mom和vol两因子打分合成
开发语言·c++·python·数据挖掘·c#
思麟呀10 分钟前
位运算:从一个整数到一个集合
c语言·数据结构·c++·算法
m0_380743871 小时前
PHP7.3和7.2字符串功能有什么不同
开发语言·php
All for pursuit.1 小时前
【分治-3】347.前K个高频元素
数据结构·c++·算法·leetcode
m0_380743872 小时前
PHP 8.4的新语法怎么用才规范
开发语言·php
头发够用的程序员2 小时前
TensorRT 自定义算子插件实战(一):从零手写 customScaledTanh
c++·人工智能·pytorch·python·深度学习·边缘计算·jetson
哭泣方源炼蛊2 小时前
正则表达式c++内容汇集
数据库·c++·mysql·正则表达式
阿狗童鞋2 小时前
Java并发编程实战指南
java·开发语言
别动我齐刘海2 小时前
简历技术栈全面复习——UDP / TCP / CAN / ZMQ / Protobuf 通信工程
网络·c++·python·tcp/ip·机器学习·udp·github