目录
初始化列表
作用:初始化属性
语法:
构造函数():属性1(值1),属性2(值2)...{}
例:
class Person
{
public:
Person(int a,int b,int c) :m_A(a), m_B(b), m_C(c)
{
}
int m_A;
int m_B;
int m_C;
void test01()
{
Person p(10, 20, 30);
}
静态成员
如果类的数据成员或成员函数使用关键字static进行说明,这样的成员被称为静态数据成员或静态成员函数,统称为静态成员。如果在类中对静态数据成员进行声明,那必须在类外对这个静态成员进行定义。(类内声明,类外初始化)
静态成员变量
- 所有对象共享同一份数据
- 在编译阶段分配内存
- 类内声明,类外初始化
静态成员函数
- 所有对象共享同一个函数
- 静态成员函数只能访问静态成员变量
在类内声明静态成员之后,在类外定义静态成员时,不需要再使用static进行说明。在类中定义的静态成员函数若符合内联函数的规定,编译器按照内联函数进行编译。
类中的任何成员函数都可以访问类的静态成员。类的静态成员函数没有this指针,所以在静态成员函数内只能通过对象名(或指向对象的指针)访问对象的非静态成员。
类的对象成员与一般成员有以下不同:
(1)静态成员不属于某个具体的对象,只与类名连用。
(2)在没有建立对象之前,静态成员就已经存在。
(3)静态数据成员为该类的所有对象共享,它们被存储于一个公用的内存中。
(4)静态成员函数没有this指针。
(5)静态成员函数不能直接访问非静态成员
(6)静态成员函数不能说明虚函数
this指针
在C++中规定,当一个成员函数被调用时,系统自动向它传递一个隐含的参数,该参数是一个指向调用该函数的对象的指针,从而是成员函数知道该对哪个对象进行操作。在程序中,可以使用关键字this来使用该指针。ths指针是c++实现封装的一种机制,它将对象和该对象调用的成员函数连接在一起,在外部看来,每一个对象都拥有自己的成员函数
this指针指向被调用的成员函数所属的对象。
this指针是隐含每一个非静态成员函数内的一种指针。
this指针的用途:
当形参和成员变量同名时,可用this指针来区分
在类的非静态成员函数中返回对象本身,可使用return *this
对象的特性
对象的特性
(1)同一个类的对象之间可以相互赋值
(2)可使用对象数组
(3)可使用指向对象的指针,使用取地址运算符“&”可以获取一个对象的地址
(4)对象可以用作函数参数
(5)使用对象作为函数参数时,可以使用对象、对象的引用、对象的指针。
(6)一个对象可以作为另一个类的成员
类的使用权限
一般情况下,类的成员的使用权限如下:
(1)类本身的成员函数可以使用类的所有成员(私有、保护、公有)
(2)类的自类的成员函数可以使用类的保护成员和公有成员
(3)非(1)(2)的函数可以通过类的对象使用类的公有成员
const对象
可以在类中使用const关键字说明数据成员、成员函数或一个对象。一个const对象只能访问他的const成员函数,否则将产生编译错误。
1.const成员
const成员包括const数据成员、const静态数据成员和const引用成员。const静态数据成员仍保留静态成员特征,需要在类外定义并初始化。const数据成员和const引用成员只能通过初始化列表来赋值。
2.const引用作为函数参数
3.const对象
在对象名字前使用const可以定义常量对象,定义常量对象的同时必须进行初始化,而且该对象在使用过程中不能被更改。
4.const成员函数
成员函数后面加const后称为常函数
常函数内不能修改成员属性
成员属性声明时加关键字mutable后,在常函数中依然可以修改
友元
在程序里,有些私有属性也想让类外特殊的一些韩书或者类进行访问,就需要用到友元的技术
友元的目的就是让一个函数或者类访问另一个类中私有成员
使用友元可以允许一个函数或一个类无限制地存取另一个类的所有成员,。可以在C++类中使用关键字friend声明友元,友元并不是类的成员。友元的声明可以出现在类体中的任意位置。
C++中的友元有以下三种形式:
1.普通函数作为友元
可以在类中使用friend声明一个普通的函数为本类中的友元函数
2.成员函数作为友元
可以在类中使用friend声明一个类的某个成员函数为本类的友元函数
3.将一个类说明为另一个类的友元
可以在类中使用friend声明一个类为本类的友元。声明后该类的所有成员函数均成为友元函数。
友元关系是不传递的。