【C++】类与对象(一)
发布时间:2026/9/13 18:13:08 锦皓数字建站
`)
c兼容c语言中struct的用法同时将struct升级成了类用class表示。c语言结构体中只能定义变量而c还可以定义函数。一、三个成员声明域分为局部域、全局域、命名空间域、类域。在类中为了方便类的使用和保存c用public与private函数分开作用域与访问权限分配的是类域。privateprivate作用域中通常存储类的成员变量在private作用域中的成员变量不可以被类外面、主函数、其他类直接访问只能在当前类内部使用。由此可以保证安全封装类里面的数据不会被外界随便修改。class Person { private: int age;//私有外面读不了 }publicpublic作用域中的成员函数可以直接被访问主函数其他类都可以直接调用并且对外公开接口。class Person{ public: void setAge(int a); int getAge(); }同时我们不需要命名太多函数且函数直接访问结构体无需传参。在类里面声明函数定义函数时要指明类才可以使用类的成员变量。protected该类内部可以直接访问子类可继承访问但外部类不可访问。二、封装封装的三大特性封装、继承、多态。定义将数据和操作数据的方法进行有机结合隐蔽对象的属性和实现细节仅对外公开接口来和对象交互。封装本质上是一种管理方便用户使用类。在同一种多个类中成员函数会置于公共区因此只需要一份且地址相同。为了方便定义且方便占地址空类大小为1。只有成员函数的类也是空类。三、this指针this 是成员函数隐含的形参类型是const*因此不可被修改。this 指针存放当前调用函数对象的地址。*只有非静态成员函数才有this。this指针可以为空但是为空时不可调用this指针中的成员。this指针存放与栈区。四、类的六个默认成员函数类有六个默认的成员函数分别是构造函数、析构函数、拷贝函数、赋值重载、取地址重载、const取地址重载。构造函数与析构函数的作用是初始化和清理。拷贝函数赋值重载的作用是拷贝复制。取地址重载、const取地址重载的作用是取地址重载。初始化和清理1.构造函数类似Init构造函数是一个特殊的成员函数其主要任务不是开辟空间创建对象而是初始化对象。其特征如下1.函数名与类名相同。2.无返回值。3.对象实例化时编译器自动调用对应的构造函数。4.构造函数可以重载。编译器生成默认成员函数有什么用c把类型分为内置类型(基本类型)和自定义类型。内置类型就是语言提供的数据类型如intchar......自定义类型就是如classstructunion我们自己定义的类型。编译器默认生成的构造函数会对自定义类型成员调用它的成员函数。默认构造函数包括无参构造函数、全缺省构造函数、由编译器默认生成的构造函数。给缺省值内置类型成员可以在类中声明缺省值而非初始化。默认构造函数会用缺省值进行初始化。总结一般情况下构造函数都需要我们自己编写实现只有少数情况下可以让编译器自动生成构造函数类似MyQueque成员全是自定义类型。2.析构函数类似Destroy对象在销毁时会自动调用析构函数完成对象中资源的清理工作。其特征如下1.析构函数是在类名前加上字符~。2.无参数返回值类型。3.一个类只能有一个析构函数。若为显式定义系统会自动生成一个默认的析构函数。注意析构函数不能重载。4.对象生命周期结束时c会自动调用析构函数。自动生成析构函数与构造函数类似内置类型不做处理自定义类型调用它的析构。拷贝复制3.拷贝构造函数用同类型的对象拷贝初始化。拷贝构造是构造函数中的一个子分类。其特征如下1.拷贝构造函数是构造函数的一个重载形式。2.拷贝构造的参数只有一个且必须是同类类型对象的引用如果直接传值编译器会报错因为会引发无限递归调用。3.若未显示定义编译器会生成默认的拷贝构造函数。默认的拷贝构造函数对象按内存存储按字节序完成拷贝这种拷贝叫浅拷贝或者值拷贝。在编译器生成的默认拷贝构造函数中内置类型是按照字节方式直接拷贝的而自定义类型是调用其拷贝构造函数完成拷贝的。为什么拷贝构造函数参数一定要用引用传参因为传值会导致传参时进行无限递归调用必须传引用。两种等价写法Class d1(d2); Class d1 d2;浅拷贝与深拷贝由于浅拷贝只进行值的复制所以很多情况下使用浅拷贝会出现错误所以需要自行编写拷贝构造进行深拷贝。总结1.如果没有管理资源一般情况下不需要写拷贝构造使用默认拷贝构造就可以。2.如果成员都是自定义类型或内置类型没有指向资源也类似。3.如果不需要析构通常都可以不写构造。4.如果内部有指针或者一些值指向资源就需要编写拷贝构造进行深拷贝。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。