C++面向对象

191 阅读2分钟

面向对象

类的特性:抽象、继承、封装、重载、多态

class和struct

  • c语言的struct和c++的class

    struct只是一种复杂数据类型,只能定义成员变量,而不能定义成员函数

  • c++中的struct和class

    1. class中默认的访问权限是private,而struct是public
    2. class继承默认是private,struct继承默认是public
    3. class可以用于表示模板类型,struct不行

空类

对于一个c++的空类,虽然类中没有任何成员,但是编译器会加入一些成员函数

  • 默认构造函数和复制构造函数
  • 析构函数
  • 赋值运算
  • 取值运算

对于c++来说,构造函数可以被重载,但是析构函数不可以被重载

构造函数explicit与普通构造函数的区别

虚析构函数的作用

复制构造函数

复制构造函数是一种特殊的构造函数,它由编译器调用来完成一些基于同一类的其他对象的构件及初始化,如果在类中没有显式地声明一个复制构造函数,那么编译器会私下里制定一个函数来进行对象之间的复制。

三种情况复制构造函数会被调用

  • 一个对象以值传递的方式传入函数体
  • 一个对象以值传递的方式从函数返回
  • 一个对象需要通过另外一个对象进行初始化

浅复制和深复制 浅复制是指让新旧两个对象指向同一个外部的内容,而深复制是指为新对象制作了外部对象的独立复制

复制构造函数和赋值函数

  1. 复制构造是一个对象来初始化一块内存区域,这块内存就是新对象的内存区,赋值函数是已经初始化好的进行的赋值
  2. 复制构造函数首先是一个构造函数,它调用的时候是通过参数传进来的那个对象来初始化产生一个对象。赋值函数则是把一个对象赋值给一个原有的对象,如果原来的对象中有内存分配,要先释放内存,还要检查一下两个对象是否是同一个对象,如果是,不做任何操作