C++入门06 --多态,虚函数,虚函数表,纯虚函数,抽象类

2021-08-12  本文已影响0人  YanZi_33

多态

#include <iostream>

using namespace::std;

class Animal {

public:
    void run(){
        cout << "Animal run()" << endl;
    }
};

class Dog : public Animal{

public:
    void run(){
        cout << "Dog run()" << endl;
    }
};

class Cat : public Animal{

public:
    void run(){
        cout << "Cat run()" << endl;
    }
};

class Pig : public Animal{

public:
    void run(){
        cout << "Pig run()" << endl;
    }
};

void liu(Animal *a){
    a->run();
}

int main(int argc, const char * argv[]) {
    
    liu(new Dog());
    liu(new Cat());
    liu(new Pig());
    
    return 0;
}

虚函数

#include <iostream>

using namespace::std;

class Animal {

public:
    virtual void run(){
        cout << "Animal run()" << endl;
    }
};

class Dog : public Animal{

public:
    void run(){
        cout << "Dog run()" << endl;
    }
};

class Cat : public Animal{

public:
    void run(){
        cout << "Cat run()" << endl;
    }
};

class Pig : public Animal{

public:
    void run(){
        cout << "Pig run()" << endl;
    }
};

void liu(Animal *a){
    a->run();
}

int main(int argc, const char * argv[]) {
    
    liu(new Dog());
    liu(new Cat());
    liu(new Pig());
    
    return 0;
}

虚表

#include <iostream>

using namespace::std;

class Animal {
public:
    int m_age;
    
    virtual void speak(){
        cout << "Animal speak()" << endl;
    }
    
    virtual void run(){
        cout << "Animal run()" << endl;
    }
};

class Cat : public Animal{
public:
    int m_life;
    
    void speak(){
        cout << "Cat speak()" << endl;
    }
    
    void run(){
        cout << "Cat run()" << endl;
    }
};

int main(int argc, const char * argv[]) {
    
    Animal *cat = new Cat();
    cat->m_age = 3;
    cat->speak();
    cat->run();
    
    cout << cat << endl;
    
    return 0;
}
Snip20210813_147.png Snip20210813_148.png

总结:

子类调用父类的成员函数

#include <iostream>

using namespace::std;

class Animal {
public:
    int m_age;
    
    virtual void speak(){
        cout << "Animal speak()" << endl;
    }
    
    virtual void run(){
        cout << "Animal run()" << endl;
    }
};

class Cat : public Animal{
public:
    int m_life;
    
    void speak(){
        Animal::speak();
        cout << "Cat speak()" << endl;
    }
    
    void run(){
        Animal::run();
        cout << "Cat run()" << endl;
    }
};

int main(int argc, const char * argv[]) {
    
    Animal *cat = new Cat();
    cat->m_age = 3;
    cat->speak();
    cat->run();
    
    cout << cat << endl;
    
    cout << sizeof(Animal) << endl;
    
    return 0;
}

虚析构函数

#include <iostream>

using namespace::std;

class Animal {
public:
    int m_age;
    
    virtual void speak(){
        cout << "Animal speak()" << endl;
    }
    
    virtual void run(){
        cout << "Animal run()" << endl;
    }
    
    virtual ~Animal(){
        cout << "~Animal()" << endl;
    }
};

class Cat : public Animal{
public:
    int m_life;
    
    void speak(){
        Animal::speak();
        cout << "Cat speak()" << endl;
    }
    
    void run(){
        Animal::run();
        cout << "Cat run()" << endl;
    }
    
    ~Cat(){
        cout << "~Cat()" << endl;
    }
};

int main(int argc, const char * argv[]) {
    
    Animal *cat = new Cat();
    cat->m_age = 3;
    cat->speak();
    cat->run();
    
    delete cat;
    
    cout << cat << endl;
    
    cout << sizeof(Animal) << endl;
    
    return 0;
}

纯虚函数

class Animal {
public:
    virtual void speak() = 0;
    
    virtual void run() = 0;
};

抽象类

上一篇 下一篇

猜你喜欢

热点阅读