C++ 向对对象编程

面向对象的三大特点

  • 1.封装-

    • 将不同的小对象封装成一个大对象
    • 把一部分内部属性和功能对外界屏蔽
  • 2.继承

    • 单继承
    • 多继承
    • 开放性
    • 可扩充性
  • 3.多态

    • 相同的行为可作用于多种类型的对象上并获得不同的结果

向对过程编程开发的程序

  • 算法 + 数据结构

向对对象

  • 设计所需的各种类和对象, 决定把哪些数据和操作封装在一起
  • 考虑怎样向有关的对象发送消息

类的定义

class 类名标识符
{
public:
    数据成员
    成员函数
private:
    数据成员
    成员函数
protected:
    数据成员
    成员函数
};

运算符重载

operator 类型名()
对于++ --运算符,由于涉及前置运算符和后置运算符,如果重载运算符没有参数,而表示前置运算

  • 前置运算
void operator++()
{
    ++m_pages;
}
  • 后置运算
void operator++(int)
{
    ++m_pages;
}

二义性

派生类在调用成员函数时,先在自身的作用域内寻找,如果找不到,会到基类中寻找,但当派生类继承的基类中有同名成员时,派生类中就会出现来自不同基类的同名成员

class CBaseA
{
public:
    void function();
};
class CBaseB
{
public:
    void function();
};
class CDeriverC:public CBaseA,public CBaseB
{
    //没有定义function 不知道调用哪一个基类
};

虚函数 virtual

  • 多态性通过联编实现
    • 静态联编
    • 对态联编
  • 在C++中根据联编的时刻不同,存在两种类型的多态性
    • 函数重载 重载是同一层次函数名相同
    • 虚函数 覆盖是在继承层次中成员函数的函数原型完全相同

在基类中用virtual声明成员函数为虚函数, 在派生类中重新定义此函数,改变函数的功能.

  • 当一个成员函数被声明为虚函数后,其派生类中的同名函数都自动成为虚函数
  • 如果派生类没有覆盖基类的虚函数,则调用基类的函数

利用虚函数实现动态绑定

  • 对态绑定的实现方法
    • 定义一个指向基类对象的指针变量,并使它指向同一类族中需要调用该函数的对象,通过该指针变量调用此虚函数
```
#include<iostream>
using namespace std;
class CEmployee
{
public:
    int m_ID;
    char m_Name[128];
    char m_Depart[128];
    CEmployee()
    {
        memset(m_Name,0,128);
        memset(m_Name,0, 128);
    }
    virtual void OutputName()
    {
        cout << "员工姓名:" << m_Name << endl;
    }
}; 
class COperator :public CEmployee
{
public:
    char m_Password[128];
    void OutputName()
    {
        cout << "操作员姓名:" << m_Name << endl;
    }
};
int main()
{
    CEmployee *pWorker = new COperator();
    strcpy_s(pWorker->m_Name, "MR");
    pWorker->OutputName();//操作员姓名:MR
    delete pWorker;
    return 0
}
```

虚函数的限制
- 只有类的成员函数才能为虚函数
- 静态成员函数不能是虚函数,因为静态成员函数不受限于某个对象
- 内联函数不能是虚函数,因为内联函数是不能在运行中动态确定其位置的
- 构造函数不能是虚函数,析构函数通常是虚函数

虚继承(解决多继承时构造函数重复调用的问题)

  • 通常,在定义一个对象时,先依次调用基类的构造函数,最后才调用自身的构造函数
  • 对于虚继承来说,只调用一次
  • 如果能够用单继承实现的,尽量不要用多继承

抽象类

含有纯虚函数的类称为抽象类

virtual 类型 函数名(参数列表)=0

对于含有纯虚函数的类来说,是不能能够实例化的

抽象类通常用于作为其他类的父类,从抽象类派生的子类如果不是抽象类,必须实现父类中的所有纯虚函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值