C++类简述

来源:互联网 发布:淘宝活动促销词 编辑:程序博客网 时间:2024/04/30 09:13

什么是类?
用户自定义类型,一种数据结构 ; C++实现封装的就是类,把对象的属性和行为结合成一个封装体;
假设有类Empty_one、Empty_two两个空类,但空类同样可以被实例化,而每个实例在内存中都有一个独一无二的地址,为了达到这个目的,编译器往往会给一个空类隐含的加一个字节,这样空类在实例化后在内存得到了独一无二的地址,所以sizeof(Empty_one)和sizeof(Empty_two)的大小为1。

1.类的成员函数:
类的成员函数要是不声明为public,外面是无法调用的,包括构造函数;
6个默认成员函数:
当空类Empty_one定义一个对象时Empty_one pt;sizeof(pt)仍是为1,但编译器会生成6个成员函数:一个缺省的构造函数、一个拷贝构造函数、一个析构函数、一个赋值运算符、两个取址运算符(一个const,一个非const)(const的在返回值和后面都加了const)。编译器只有在你一个构造函数都没有的情况下,才会给你生成默认的,有一个了就不生成了;

1、构造函数:无返回值,名字是类名,可以重载,初始化列表:X(_X) , Y(_Y)这种形式。非静态const成员变量,引用和没有缺省或者默认构造函数的类必须在初始化列表初始化(静态数据成员不能再初始化列表初始化):数据成员在类中定义顺序就是在参数列表中的初始化顺序,因此尽量保证初始化顺序就是类中定义顺序;
2、拷贝构造函数:构造函数的一种重载,默认的拷贝构造函数会依次拷贝类的数据成员完成初始化。
3、析构函数:析构函数体内并不是删除对象,而是做一些清理工作。析构函数体本身并不直接销毁成员。成员是在析构函数体之后隐含的析构阶段中被销毁的。析构函数可以是虚函数,并且最好是虚函数;

运算符重载:
1、不可以重载 *解引用,点. 域解析符 :: 和 ?
2、重载必须包含一个类类型或者枚举类型的参数,一个int 一个自定义是可以的
4、赋值运算符重载:要检查是不是自己给自己赋值,一般返回*this的引用;
7、一般将算术操作符定义为非成员函数,将赋值运算符定义成员函数
8、操作符定义为非类的成员函数时,一般将其定义为类的友元函数
9、== 和 != 操作符一般要成对重载
10、下标操作符[]:一个非const成员并返回引用,一个是const成员并返回引用
11、解引用操作符*和->操作符,不显示任何参数
13、自增自减操作符
前置式++/–必须返回被增量或者减量的引用
后缀式操作符必须返回旧值,并且应该是值返回而不是引用返回
14、输入操作符>>和输出操作符<<等必须定义为类的友元函数

类的 静态成员:
1、静态数据成员
初始化在类外初始化,并且要带上类的作用域;初始化的时候不加static
被存放在静态区,所有的对象共享,不计入类的大小,受访问限制符限制;
引用静态区可以用 类名::静态成员或者对象名.静态成员 ,后者也会别转换为前者;(前提是public)
如果是静态常数据成员,可以在类内初始化; 并且不能在初始化列表中初始化。只能在类外。
2、静态成员函数
和静态成员一样,不属于某个对象,属于整个类。对静态成员函数的引用可以是 类名::函数名;
静态成员函数只能访问静态数据成员,要引用非静态成员必须与特定对象结合;

友元函数
在类内的函数前面加上friend(只能在类内加),
1、友元函数可以访问类的所有数据成员;
2、 友元函数不是类的成员,不带this指针,必须通过对象名或者对象的引用作为友元函数的参数来访问对象的成员。友元函数必须在类定义中说明,可以定义在类外
3、友元函数不受类的访问限制符限制;
4、一个函数可以是多个类的友元;
5、友元函数不能是const的
6、友元关系不能继承和传递
对于友元类:
在类中加上friend声明即可;
友元类可以反问本类的所有成员,本来不可以访问友元类的成员;

内联函数:
1、声明和定义都在类内的默认是inline,声明前面加inline没有用,在类外定义时加inline就可以了:
2、并不是加了inline编译器就一定做内联处理;
3、如果编译器将其作为内联,在编译时就替换了,类似于宏替换;
4、内联函数和宏的区别,内联函数相对于宏的优点()
5、内联函数的定义必须放在头文件里面
6、跟类无关的函数也可以定义为内联函数;必须把声明和定义放一起加上inline。
外联函数:
1、就是定义在类外,声明在类内的成员函数;

0 0
原创粉丝点击