类与对象知识整理(二)

    xiaoxiao2022-07-12  150

    初始化列表

    在构造函数{}内部,对成员变量赋值,这个是对成员变量赋初值,不能成为成员变量的初始化,**成员变量的初始化是在{**之前的位置,成员变量的初始化只能进行一次,而赋值可以赋多次。

    Date(int year, int month, int day) : _year(year) , _month(month) , _day(day) {}

    初始化列表:对成员变量进行初始化的地方,如上面代码所示,括号内为初始值或表达式。

    引用成员变量、const成员变量、自定义类型成员变量(没有默认构造函数)必须在初始化列表进行初始化。成员变量在类中的声明顺序就是在初始化列表中初始化的顺序。

    引出explicit关键字

    对于单参的构造函数来说,其具有隐式类型转换。 用整型变量对日期类对象赋值时,如对象d=10; 编辑器在执行这一句时会将10创建一个临时对象,调用构造函数对d进行赋值。这样的赋值看起来两边类型不一致,却能够赋值成功,是因为进行了隐式类型转换,代码可读性不高。explicit关键字修饰构造函数,可以防止隐式类型转换,d=10;不合法。

    static成员

    static修饰成员变量称为静态成员变量,静态成员变量必须在类外进行初始化。 static修饰成员函数称为静态成员函数。 静态成员存在数据区,被所有类所共享,全局只有一个,类外定义; 类静态成员可用类名::静态成员或者对象.静态成员来访问。 静态成员没有this指针,不能访问非静态成员。

    友元

    友元分为友元函数和友元类。 关键字friend friend在类里声明函数,在类外定义这个函数,在函数内部可以使用私有成员变量,友元函数不属于成员函数。其突破了类的封装,一般用在重载>>,<<。把它们声明成普通函数。因为作为成员函数时第一个参数是隐含的this指针,第二个参数才是cin或cout,这样调用该函数时是d<<cout;但我们一般使用方法是cout<<d;所以友元的作用是在类内声明该函数,类外定义该函数为普通函数,同时可以使用类内的私有成员变量。 友元类:friend class 类名

    友元类所有成员函数都为另一个类的友元函数友元关系是单向的友元关系不能传递

    内部类

    如果一个类定义在另一个类的内部,这个内部类就叫做内部类。这个内部类不属于外部类,不能通过外部类的对象访问到内部类。

    内部类只能通过外部类对象的形式访问外部类的普通私有成员变量外部类的静态成员,可以直接访问到

    内部类定义在private、protect在外部是不可见的。

    最新回复(0)