类和对象
C++面向对象的三大特征:封装、继承、多态
类
类可以理解为一类事务的抽象,把一类事务抽象为一类,这个类中包括属性和行为,当我们把这个抽象实现出来时,我们可以说这一个实现就是一类中的一个实例
对象
我们几乎可以将所有东西看为一个对象,其对象中包含属性和行为
如果我们把手机作为一个对象,那么
- 属性:就是手机拥有的特性,例如屏幕,充电口,耳机口等等
- 行为:就是手机可执行的操作,例如打电话、玩游戏、看视频等等
成员
成员就是类总的属性以及行为甚至是其他部分,只要是组成这个类的部分,我们都统称为成员
对象成员
当一个类中包含另一个类的对象时,这个对象可以称为对象成员
构造顺序
在构造包含对象成员的类时,会先调用对象成员的构造函数再调用自身的构造函数
析构顺序
在析构包含对象成员的类时,会先调用自身析构函数再调用对象成员的析构函数
静态成员
静态成员包括静态成员对象和静态成员函数,静态成员和非静态成员的区别是静态成员不属于类的对象,属于这个类的全体,在内存中只有一份,而非静态成员是属于每一份类的对象
静态成员变量
// 格式
public A {
public:
static int i = 1;
}
静态成员函数
静态成员函数只能访问静态成员对象,对于非静态成员对象时无法访问的
// 格式
public A {
public:
int j = 0;
static int i = 0;
static void test(){
i++;
// j++; 非法的无法被访问到
}
}
静态成员的访问方式
// 格式
class A{
public:
static void func(){};
static I = 1;
}
A a;
a.func(); // 通过类的对象访问
A::I; // 通过类名来访问
常量成员
常量成员指的是此成员是不可被修改的
this 指针
this指针是隐藏在每一个非静态成员函数中的指针,它代表了调用该函数的对象的引用
例如
class A {
public:
int i;
public A(int i) {
// this->i代表对象的i属性的值设置为构造参数中i的值
this->i = i;
}
}
友元
友元指的是可以通过一种手段访问类中的私有成员的技术
全局友元函数
我们可以创建一个全局函数此全局函数可以访问其他类的私有成员
案例
class Person {
private:
int m_A;
// 友元全局函数声明不分权限修饰符
friend void friendFunction(Person&);
};
void friendFunction(Person &p) {
p.m_A = 123;
}
友元类
我们可以指定某个类是另一个类的友元类
案例
class Person;
class GodPerson;
class Person {
friend class GodPerson;
string mMsg;
Person() {mMsg = "消息";}
};
class GodPerson {
private: Person person;
public: void showMsg() {cout << person.mMsg << endl;}
};
类友元函数
我们可以类中指定某个类的函数作为此类的友元函数
案例
class B;
class A;
class B {void test(A& a);};
class A {
private:
friend void B::test(A&);
int mTest = 100;
};
void B::test(A& a) {a.mTest = 1;}