0%

面向对象

c++基本知识

c++对c的增强主要表现在两个方面

  • 在原来面向过程的机制基础上,对c语言的功能做了不少补充。
  • 增加了面向对象的机制。

    c++的四大特性:抽象、封装、继承和多态

  • 抽象的作用是表现同一类事物的本质。类是对象的抽象,对象是类的特例,或者说类的具体表现。
  • 封装主要表现在两个方面:
    (1)将有关数据和操作代码封装在一个对象中形成一个基本单位,各个对象间相互独立,互不干扰。
    (2)将对象的某些部分进行隐蔽,即隐蔽其内部细节,只留下部分接口,以便与外界联系,接收外界信息。
  • 继承:在一个已有类的基础上建立一个新的类,该新类获得已有类的已有特征。
  • 多态:对同一信息,不同对象会产生不同的响应。

    类和对象的使用

  • 构造函数:
    是一种特殊的函数,在建立对象时自动执行。构造函数中的参数的值既可以通过实参传递,也可以指定为某些默认值。
  • 析构函数:
    当对象的生命周期结束时,会自动执行析构函数。
  • 构造函数与析构函数的联系:
    先构造后析构,后构造先析构。先进后出原则。
  • 对象指针:
    一个对象的存储空间的起始地址就是对象的指针。
  • 静态成员:
    静态成员初始化一般形式: 数据类型 类名::静态成员名=初值;
    静态成员函数:如果在类外调用静态成员函数,要用类名和域运算符“::”。
  • 友元:
    友元函数:在类体中用friend对函数声明在类外定义,该函数为友元函数,友元函数可以访问这个类中的私有成员。
    友元成员函数:friend函数不仅可以是一般函数,而且可以是另一个类中的成员函数。
    友元类:友元关系是单向的不是双向的;友元关系不能传递

    对运算符的重载

  • 格式:
    函数类型 operator 运算符名称(形参表)
  • 不可重载的五个运算符:
    . * :: sizeof ?:
  • 特性:
    不能改变运算符的对象个数
    不能改变运算符的优先级
    不能改变运算符的结合性
    不能有默认参数
  • 双目运算符:< > ==
  • 流提取和流插入运算符的重载
    friend istream & operator >> (istream &,自定义类名 &)
    friend ostream & operator << (ostream &,自定义类名 &)

    不同类型数据的转换

    形式:类型名(数据)、(类型名)数据

    继承和派生

  • 继承:在一个已有类的基础上建立一个新的类,该新类获得已有类的已有特征。
  • 从父类产生一个新的子类称为类的派生。
  • 声明派生类的一般形式:
    class 派生类名:[继承方式] 基类名{派生类新增加成员};
  • 继承方式:公有继承、私有继承、受保护继承。
    公有继承:在派生类中不可访问基类的私有属性,其他不变。
    私有继承:在派生类中不可访问基类的私有属性,其他变为私有属性。
    受保护继承:在派生类中不可访问基类的私有属性,其他变为受保护属性。
  • 派生类的构造函数
    在执行派生类的构造函数时,调用基类的构造函数。
  • 派生类新增加的同名成员覆盖了基类的同名成员。
  • 虚基类:使得继承间接共同基类时只保留一份成员。
    形式:class B:virtual public A{};
    为了保证虚基类在派生类中之继承一次,应当在该基类的所以直接派生类中声明为虚基类,否则仍然会出现对基类的多次继承。
  • 基类和派生类之间的转换:
    1) 派生类对象可以向基类对象赋值
    2)派生类对象可以代替基类对象向基类对象的引用进行赋值或初始化。

    多态性

  • 多态:向不同对象发送同一信息,不同对象在接收时会产生不同的行为(即方法)。
  • 利用虚函数实现多态性
    虚函数的作用是允许在派生类中定义与基类同名的函数,并且通过基类指针或引用来访问基类和派生类的同名函数。
  • 确定调用的具体对象的过程称为关联。
  • 虚析构函数:系统只会调用基类的析构函数,而不执行派生类的析构函数。
  • 纯虚函数:virtual 函数类型 函数名(参数列表)=0;
  • 凡是包含纯虚函数的类都是抽象类,
    这种不用来定义对象而作为一种基本类型用作继承的类称为抽象类。