zoukankan      html  css  js  c++  java
  • [瞎JB写] C++多态

    似乎只能通过引用或者指针进行动态多态。。。蛋疼的语法

    #include <iostream>
    #include <vector>
    #include <memory>
    using namespace std;
    
    class A {
    public:
        virtual void init() = 0;
    };
    
    class B : public A {
    public:
        void init() {
            cout << "B init" << endl;
        }
    };
    
    class C :public B {
    public:
        void print() {
            cout << "C -> B" << endl;
        }
        void init() {
            cout << "C init" << endl;
        }
    };
    
    class D : public A {
    private:
        int wow;
    public:
        D() { wow = 0; }
        D(int a) :wow(a) {}
        void init() {
            cout << "D init" << endl;
        }
        void print() {
            cout << "D -> A" << wow << endl;
        }
    };
    
    int main() {
        vector<shared_ptr<A>> list;
        list.push_back(make_shared<C>());
        list.push_back(make_shared<D>(1));
        for (auto &item : list) {
            item->init();
        }
        ((D*)list[1].get())->print();
        return 0;
    }

    这样就可以实现所有物体放在一个容器里。。。

    但是缺点也是显而易见的,如果强制转换到了错误的类,后面使用的时候就会出问题。

    所以不能这么粗暴的转换,有一表达式可以帮助我们:

    dynamic_cast

      #define PTR_CONVERT(shared_ptr, type) (dynamic_cast<type*>(shared_ptr.get()))

    PTR_CONVERT(list[0], C)->print();
    PTR_CONVERT(list[1], D)->print();
  • 相关阅读:
    noip不知道哪年 货车运输
    bzoj1002轮状病毒
    bzoj1001狼抓兔子
    20171002模拟赛
    20171001模拟赛
    异常
    springmvc-servlet.xml 第二种选择
    springmvc入门
    springmvc-servlet.xml(springmvc-servlet.xml 配置 增强配置)
    777
  • 原文地址:https://www.cnblogs.com/makejeffer/p/5533544.html
Copyright © 2011-2022 走看看