• C++ 封装之析构函数、this指针、static、const 关键字


    C++ 封装之析构函数、this指针、static、const 关键字

    一、析构函数

    1.定义:在销毁对象时自动调用此函数,往往用来释放对象内申请的资源;

    2.与类名相同,在前面加位取反符~。且不能有任何参数与返回值;

    class Pointer
    {
    	public:
    		Pointer(int *_x,int *_y)
    		{
    			x=new int(* _x);
    			y=new int(* _y);
    			
    		}
    		Pointer(const Pointer &other);
    		~Pointer();//析构函数
    		void show();
    	private:
    		int *x;
    		int *y;
    };
    
    Pointer::~Pointer()
    {
    	delete x;
    	delete y;
    	
    }
    void Pointer:show()
    {
    	cout<< *x<<endl;
    	cout<< *y<< endl;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    3.特点:

    (1)没有参数和返回值,但有this指针;
    (2)析构函数不能用const修饰;
    (3)一个类有且只有一个析构函数,所以不能重载;

    二、this 指针

    1.用于保持对象的地址,每一个非静态函数中都有一个隐藏参数this;

    2.在非静态函数中,需要返回对象本身;

    3.在非静态函数中,传入形参名与对象内成员变量相同时区分两个变量;(传入的形参只能做右值)

    三、static 关键字

    1.static表示静态关键字,可以用于修饰成员变量与成员函数;静态成员可以通过双冒号来使用,即 <类名>::<静态成员名>;

    2.修饰成员变量

    (1)在类中声: static <类型修饰符> <变量名>,在类外初始化 :<类型修饰符><类名>::<变量名>=<初始化值>;

    class Person
    {
    	private:
    		static int age;
    }
    int Person::age=10;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    3.特点:

    (1)static 修饰的成员变量属于类不属于具体的对象;

    (2)static 成员变量的内存在程序开始运行时分配,程序运行结束时释放内存;

    (3)static 成员变量对于所有的对象是共享的,并在对象创建之前就已经产生了;

    (4)静态成员使用前必须初始化,否则会在linker(链接)步骤时出错;

    (5)在成员函数中可以正常访问静态成员变量;

    (6)对于公有静态成员变量,可以不需要构造对象直接访问,对于私有静态成员变量则不行;

    4.修饰成员函数

    (1)格式:static <函数返回值><函数名> (参数列表)

    (2)特点:

    1)不能访问非静态成员,只能访问静态成员;
    2)可以被对象直接使用;
    3)可以通过类名直接访问;
    4)不能使用 this 指针,与类关联,不与对象关联,在调用静态函数时,可以在没有对象时调用;

    四、const 关键字

    1.const 成员变量只能在初始化列表中初始化;

    class A
    {
    	public:
    		A(int _x) :x(_x){}
    		const int x;
    		static int y;
    }
    int A::y=10;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2.const 成员函数

    (1)防止成员函数修改非静态成员变量的值,但可以修改静态成员变量;
    (2)const成员函数只能调用const成员函数,非const成员函数既能调用非const成员函数,也能调用const成员函数;
    (3)const成员函数也可以与同名非const成员函数构成函数重载;创建const对象时调用的为const修饰的成员函数;

    3.const 修饰函数时,函数只能修饰静态变量;

  • 相关阅读:
    vue+antd——table组件实现动态列+表头下拉选择功能——技能提升
    关系型数据库RDS基本简介
    学编程少走弯路
    【Java面试】请描述一下Redis中AOF 重写的过程
    Java:SpringBoot整合Spring Batch示例
    刷题1:数组篇
    url编码 解码 百分号 %
    【云原生】Minio on k8s 讲解与实战操作
    0815(031天 线程/进程02)
    pytorch中使用多GPU并行训练
  • 原文地址:https://blog.csdn.net/jun8086/article/details/127562519