【C++】4.类和对象(下)

一、再谈构造函数

        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)引用成员变量,const成员变量,自定义类型成员(且该类没有默认构造函数时)必须使用初始化列表

        3) 尽量使用初始化列表初始化,因为不管你是否使用初始化列表,对于自定义类型成员变量, 一定会先使用初始化列表初始化。初始化列表相当于在定义数据时给数据初始化。

        4)成员变量在类中声明次序就是其在初始化列表中的初始化顺序,与其在初始化列表中的先后次序无关

        1.2、explicit关键字

        构造函数不仅可以构造与初始化对象,还具有类型转换的作用,而explicit关键字就是禁止隐式类型转化的。

二、static数据成员

        static修饰的变量称为静态成员变量,static修饰的函数称为静态成员函数。他们都是类的成员,也受public、protect、private的限制

        静态成员变量必须在类外定义,因为它处于静态区,属于全部类对象成员,初始化列表不会初始化它。

        静态成员函数,它没有this指针,不能访问类中的成员。

三、友元

        友元分为友元函数和友元类。

        3.1、友元函数

        在上一篇中的流插入,流提取中用到了友元函数,那么它究竟有什么性质呢?

        1)友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但需要在类的内部声明,声明时需要加friend关键字。

        2)友元函数不能用const修饰

        3)友元函数不受访问限定符的限制

        4)一个函数可以是多个类的友元函数

        3.2、友元类

        1)友元类的所有成员函数都可以是另一个类的友元函数,都可以访问另一个类中的非公有成员。

        2)友元关系是单向的,不具有交互性。 

        3)友元关系不能传递 如果C是B的友元, B是A的友元,则不能说明C时A的友元。

        4)友元关系不能继承。

四、内部类

        如果一个类定义在另一个类的内部,这个内部类就叫做内部类。内部类就是外部类的友元类

        性质:

        1. 内部类可以定义在外部类的public、protected、private都是可以的。

        2. 注意内部类可以直接访问外部类中的static成员,不需要外部类的对象/类名。

        3. sizeof(外部类)=外部类,和内部类没有任何关系。

上一篇:kubernetes中的静态POD


下一篇:ElasticSearch中使用bge-large-zh-v1.5进行向量检索(一)