4.虚函数-多态

Posted smallqizhang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了4.虚函数-多态相关的知识,希望对你有一定的参考价值。

1.多态

  多态的条件:

    (1):继承

    (2):父类中有虚函数

    (3):在子类中重新实现父类的虚函数(覆盖虚表)

    (4):把子类对象/指针赋值给父类的引用/指针

    (5):通过父类的引用/指针来调用虚函数(只能调用父类中存在的函数)

  

  用C++类以及多态来封装pthread进程

class CppThread{
public:
    CppThread(){}
    ~CppThread(){}
    void start();
    virtual void run(){}
protected:
    pthread_t id;
};
void *func(void *arg){
    CppThread *cppth = (CppThread*)arg;
    while(1){
        cout<<"____________start-----------"<<endl;
        cppth->run();
        cout<<"____________end-----------"<<endl;
    }
}
void CppThread::start(){
    //创建线程
    pthread_create(&id, NULL, func, (void*)this);
}

 

2.纯虚函数----->虚函数声明了,但是不实现。相当于接口函数,如果一个类中包含纯虚函数,那么这个类就是抽象类。

  纯虚函数的定义:

class Base{
public:
    Base(){}
    ~Base(){}
    virtual void show() = 0;//纯虚函数
};

  抽象类(接口类)的特点:

    (1)抽象类不能创建对象

    (2)如果基类中的纯虚函数在派生类中没有全部实现,那么派生类照样是抽象类。

  

  虚析构:在多态的实现过程中,把子类的指针赋值为父类的指针,最后delete掉父类的指针,这个时候只会调用父类的析构函数,而不会自动调用子类的析构函数,如果把父类的析构函数设置成虚析构,那么delete的时候就会从子类的析构函数开始。

class Base{
public:
    Base(){};
    virtual ~Base(){}
    virtual void show();//纯虚函数
}

class Drived::Base{
public:
    Drived(){};
    ~Drived(){}
    void show()
}

int main()
{
    Base *b=new Drived();//子类的指针赋值为父类的指针
    b->show();
    delete b;//delete掉父类的指针
    return b;
}

 

3.static关键字

  static修饰的特点:

    (1):数据存储在数据段(局部全局)

    (2)只分配一次空间(只初始化一次)

    (3)修饰的变量或者函数只能在本文件中使用(文件作用域)

 

  static在类中的使用:

    修饰成员变量:

    (1)static修饰的成员变量的空间不在对象空间中。

    (2)static修饰的成员变量要在类外初始化(只初始化一次)。

    (3)static修饰的成员变量是这个类的所有对象共有的。

    (4)static修饰的公有成员变量是先于类对象而存在的,可以通过类名直接调用。

 

    修饰成员函数:

    (1)如果成员函数是公有成员函数,那么这个成员函数也是先于类对象而存在的,可以通过类名直接调用。

    (2)静态成员函数不能使用非静态成员

 

4.const关键字

  const在类中的使用:

    修饰成员变量:在构造函数成员参数列表初始化

    修饰成员函数:

      (1)格式(声明和实现都需要用const修饰)

void info()const{}

      (2)修饰的函数中不能修改成员变量,不能调用非const修饰的成员函数

    修饰类对象:被修饰的对象的属性不能被修改,如果要调用成员函数只能调用被const修饰的成员函数。

 

PS:如果有哪里写错了,请指针,互相学习。

以上是关于4.虚函数-多态的主要内容,如果未能解决你的问题,请参考以下文章

多态相关笔记

4月14日多态的笔迹总结,

C++之多态总结(多态的定义及实现,抽象类,多态原理,单继承,多继承中的虚函数表)

多态实现--虚函数与纯虚函数

面向对象语言三大特性之 “多态”

C++多态