C++初始化列表,静态成员,友元类,函数

1.初始化列表函数

初始化列表即对数据成员进行初始化。以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每一个"成员变量"后面跟一个放在括 号中的初始值或表达式。优化

构造函数体中的语句只能将其称做为赋初值,而不能称做初始化。由于初始化只能初始化一次,而构造函数体内能够屡次赋值。this

1.每一个成员变量在初始化列表中只能初始化一次。指针

2.引用类型,const类型,没有默认构造函数的自定义类型成员,都必须在初始化列表中进行初始化。对象

3. 尽可能使用初始化列表初始化,由于无论你是否使用初始化列表,对于自定义类型成员变量,必定会先使 用初始化列表初始化。ci

4.变量在初始化列表中初始化的顺序与初始化列表中的顺序无关,是依据声明时的顺序。编译器

2.explicit关键字it

因为当一个类的构造函数只有一个参数时,对其进行赋值操做会自动类型转换。例如class test{test(int a){_a=a;}private:int _a;};test a=20;此时会创造一个匿名对象调用构造函数对20进行初始化,而后使用拷贝构造对a进行初始化,不过编译器会优化,直接使用构造函数初始化a,可是这样的写法会形成一些问题,例如可读性很差,因此当想阻止这种写法时,能够用explicit修饰构造函数,将会禁止单参构造函数的隐式转换。 编译

3.静态成员:静态成员的本质就是能被全部对象共用,所以性质都是基于此的。class

1.静态成员变量

        存放在数据段中,静态成员变量在类中声明,在类外定义,且只能在类外定义和初始化,不能在类中初始化。不占用类的空间,属于全部对象共用,类访问加::,对象访问用”.“。

2.静态成员函数

        在类中声明,在类外定义,一样属于全部对象,无this指针,由于它须要被全部对象调用,而不是某一个对象。所以静态成员函数只能调用静态成员变量,不能调用非静态成员变量,非静态成员变量都是属于某一个对象,一样不能访问非静态成员函数,由于非静态成员函数都具备this指针,而静态成员函数没有this指针。

4.C++11新的初始化方法

在类中声明变量时可对其进行初始化,例如private: int _a=2;但这并非初始化,而是一个默认值,即若是没有初始化列表或构造函数,则会使用这个值。

5.友元:主要要少使用友元函数或者友元类,这样会破坏封装。

1.友元函数

在一个类中可使用friend声明一个友元函数,那么此函数就成为了这个类的友元函数,这个函数能够访问这个类的private成员。友元函数不能用const修饰 友元函数能够在类定义的任何地方声明,不受类访问限定符限制 一个函数能够是多个类的友元函数 友元函数的调用与普通函数的调用和原理相同。

2.友元类

在一个类中可使用friend声明一个友元类,那么友元类的全部函数都会成为这个类的友元函数。

注意:友元关系是单向的,不具备交换性。友元关系不能传递。

6.内部类

概念:若是一个类定义在另外一个类的内部,这个内部类就叫作内部类。注意此时这个内部类是一个独立的 类,它不属于外部类,更不能经过外部类的对象去调用内部类。外部类对内部类没有任何优越的访问权限。
注意:内部类就是外部类的友元类。注意友元类的定义,内部类能够经过外部类的对象参数来访问外部类中 的全部成员。可是外部类不是内部类的友元。
特性:
1. 内部类能够定义在外部类的public、protected、private都是能够的。

2. 注意内部类能够直接访问外部类中的static、枚举成员,不须要外部类的对象/类名。

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

相关文章
相关标签/搜索