C++ 初始化列表 const 友元 静态成员

构造函数体中仅仅是进行了赋值操作

区分 初始化 和 赋值

构造函数的初始化列表:

Data(int year=1.int month=2, int day=3)
    :_year(year)
    ,_month(month)
    ,_day(day)
    {}

初始化列表:完成类中各个成员变量的初始化(只能进行一次初始化),初始化次序按照成员变量在类中的声明次序进行初始化。

初始化列表中各个成员变量的出现的先后顺序与初始化次序无关

建议:声明次序要保持一致,尽量避免使用 成员 初始化成员

explicit 关键字 放在构造函数前面 可以把单参数构造函数的隐式类型转换功能进行限制。

默认构造函数

感觉自己需要,一定是无参的,一定有其特定作用

A类(有缺省的构造函数) B(没有显式定义):包含A类的对象

关于传参(传 类类型)的优化

传参:T&,const T& (少创建一个对象,提高了效率)

返回值:能返回引用,尽量返回引用类型

const 类型的成员变量!

const成员变量:必须在构造函数的初始化列表中初始化

const成员函数:const 实际修饰this,this类型:const T* const;不能修改类中的“成员变量”

mutable修饰的类成员变量可以在const成员函数中修改

友元

可以在类外直接访问一个类中的私有的成员变量,声明时需要加friend关键字

友元函数:<<

友元类

静态成员

要在类外进行初始化

用 static 修饰 成员变量,静态成员变量

用 static 修饰 成员函数,静态成员函数

  • 静态成员变量要在类内声明,类外使用,在计算类的大小时,不包括静态成员

  • 静态成员变量是所有对象所共享的

访问静态成员的两种形式:
//假设有一类 Test;有静态成员变量a:static int a;
//法一:通过类名+作用域
Test::a = 10;

//法二:通过对象
Test t1;
t1.a = 10;
普通成员函数不能通过法一来调用。
在静态成员函数中访问普通成员变量 会 失败。也就是:静态成员函数 不能访问 非静态的成员(普通成员变量和成员函数)。
  • 原因类的静态成员函数没有默认的this指针,因此在它里面不能使用任何 非静态成员

++注意和C语言里面的static区分++

static 修饰 变量和函数:

static变量:

  • 全局变量:static int a; static int b = 2;
  • 局部变量:static int a; static int b = 2;

extern

static修饰类成员:

  • 变量:
    1. 在类内完成声明,在类外完成定义,类外就不用加static了。类名::
    2. 所有类对象共享,不属于某个具体对象,是类属性
    3. sizeof(对象),不包含静态成员变量
    4. 对象.静态成员变量名称–》类型::静态成员变量名称
    5. 不能再构造函数初始化列表
  • 成员函数:
    1. 本质:静态成员函数没有this指针,普通成员函数有隐藏的this指针
    2. 可以不用通过对象来调用:这样来:
      对象:静态成员函数名字==》类型::静态成员变量名称

在静态成员函数中访问普通成员变量 会 失败

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值