小工具知识网

当前位置: 首页 > 行业知识 > C++ 类与对象(下)

行业知识

C++ 类与对象(下)

2026-11-07 15:56:43 来源:互联网转载

���录

1. 再谈构造函数

1.1 构造函数体赋值

 1.2 初始化列表

 1.3 explicit关键字

 2. static成员

2.1 概念

2.2 特性

 3.友元

3.1友元函数 

 3.2 友元类

4. 内部类

5.匿名对象

 6.拷贝对象时的一些编译器优化

 7. 再次理解类和对象


【本节目标】

1. 再谈构造函数

2. Static成员

3. 友元

4. 内部类

5.匿名对象

6.拷贝对象时的一些编译器优化

7. 再次理解封装


1. 再谈构造函数


1.1 构造函数体赋值

在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。

 

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 初始化列表

初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括号中的初始值或表达式,且括号内的要与成员变量的类型相同。

 

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成员变量(只能修改一次,定义时必须初识化)
  • 自定义类型成员(且该类没有默认构造函数时)
    class A{public:A(int a):_a(a){}private:int _a;};class B{public:B(int a, int ref):_aobj(a), _ref(ref), _n(10){}private:A _aobj; // 没有默认构造函数int& _ref; // 引用const int _n; // const};

    3. 尽量使用初始化列表初始化,因为不管你是否使用初始化列表,对于自定义类型成员变量,一定会先使用初始化列表初始化。编译器会调用Time的默认构造函数,对自定义类型-t进行初始化,如过Tme没有默认构造,则需要手动在初识化列表给。

    class Time{public:Time(int hour = 0):_hour(hour){cout 

上一篇:毁坏的服务器怎么找回账号?

下一篇:织梦移动站建设宝典,打造超吸睛移动网站体验!