C++ 类和对象-基础知识(持续更新)

文章目录

  • 类和对象
  • 对象
  • 成员
    • 对象成员
      • 构造顺序
      • 析构顺序
    • 静态成员
      • 静态成员变量
      • 静态成员函数
      • 静态成员的访问方式
    • 常量成员
    • this 指针
  • 友元
    • 全局友元函数
      • 案例
    • 友元类
      • 案例
    • 类友元函数
      • 案例

类和对象

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;}

你可能感兴趣的:(CPP,c++,类,封装)