[瞎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;
}

这样就可以实现所有物体放在一个容器里。。。但是用的时候。。。还要记着相应的类型,加以转换。。。

加个宏帮助转换

#define PTR_CONVERT(shared_ptr, type) ((type*)shared_ptr.get())
PTR_CONVERT(list[0], C)->print();PTR_CONVERT(list[1], D)->print();
时间: 2024-10-06 09:24:25

[瞎JB写] C++多态的相关文章

瞎jb操作

import redef test(teststr, *args): #strformatter = "%s" myargs = args[0] if len(args) > 1: for i in args[1:]: myargs += '|' + str(i) #strformatter += "|%s" #regex = "\"" + strformatter + "\"" + " %

BZOJ 4761 Cow Navigation

一开始以为瞎jb写个IDA*就过了..然而并不是这样.(naive) 我的做法是dp[x1][y1][x2][y2][d1][d2],表示两头奶牛所在的位置和面朝的方向,然后直接spfa搞定. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<queue> #define maxn 25 using namespace std; i

C/C++ 宏操作小技巧

Abstract 之前写了一个非常mini的log库(也不算库把,自己瞎jb写的),里面几乎都是宏的实现.这里打算趁热打铁,把自己知道的几下子都贴出来,后续如果有新的收获会更新这个博文. 文笔拙劣,主要是给自己做个提醒. 1. 运行时检测大小端 一目了然,不做解释. #define __ENDIAN() ({ short _a = 0x1234; *((char*)&_a) == 0x12 ? 1 : 0; }) #define big_endian() (__ENDIAN() == 1) #d

Java多态特性:重载和覆写的比较

Java重载: 在同一个类中 方法具有相同的名字,相同或不同的返回值,但参数不同的多个方法(参数个数或参数类型) public class MethoDemo{ public static void main(String args[]){ int one = add(10,20) ; // 调用整型的加法操作 float two = add(10.3f,13.3f) ; // 调用浮点数的加法操作 int three = add(10,20,30) ; // 调用有三个参数的加法操作 Syst

Java继承,多态,组合应用

继承:  面向对象的三大特征之一:    是类和类之间的一种拓展关系,是一种从一般到特殊的关系;    格式: sub   extends Super,  我们把sub称为子类或者拓展类, 把super称为父类或者基类(超类)   泛化: 把子类中的共性抽取到父类的过程; 特化: 子类在父类的基础之上,拓展自己特有的状态和特征;    Object: 是所有类的直接父类后间接父类;      class  Student{} 等价于  class  Student extends Object{

什么是多态(polymorphism)

<编程导论(Java)·2.1.2 啊,我看到了多态> 1.不明觉厉 许多人学习多态时,会觉得. 之所以不明觉厉,因为多态的定义:事物存在的多种表现形态:而后,有人将重载(overload).改写(override).多态变量和泛型归结于同一个术语"多态"之下. 例如:Polymorphism (computer science) yqj2065认为:[(前言 page VII)好像孔乙己说"多态这个字有4种写法"一样,除了凸显多态这一术语比较多态外,并

java的抽象、多态

  1.Java抽象类 1.抽象类的相关概念 如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 如形状类是抽象的类,圆.三角形等是具体类. 用abstract修饰的类就是抽象类.如果某个类中包含有抽象方法,那么该类就必须定义成抽象类.但是抽象类中不一定有抽象方法. 2.用abstract修饰的类就是抽象类.如果某个类中包含有抽象方法,那么该类就必须定义成抽象类. 抽象类可以有成员属性和非抽象的成员方法. 抽象类不能被实例化,但可以有构造函数. 抽象类只能用作基类,表示的是

多态抽象类学习

今天是忙碌的一天,早上六点半就起床然后跑操,然后早自习.第一节课本来没课却被老师硬生生的上了两节课(睡了过去),然后思政老师没来,放了昨天看的视频,中午真是生气学校搞什么藏龙之星的演讲,弄得一中午都不好,虽然逃课去吃了饭但是还是挺生气的.跟我半毛钱的关系都没有,我为什么要去,真是浪费我时间,搞得我最后还跟别人抱怨,搞得别人也生气,算了,就这样吧,感觉挺烦的. 回寝室休息了十分钟又去就业课考试,学校的联通卡这个月居然只有600M流量,又超了,真的烦.考完试又来图书馆写不到一个小时的代码又要去上计算

《编程导论(Java)&amp;#183;2.1.2 啊,我看到了多态》-什么是多态(polymorphism)

1.不明觉厉 很多人学习多态时,会认为. 之所以不明觉厉,由于多态的定义:事物存在的多种表现形态:而后,有人将重载(overload).改写(override).多态变量和泛型归结于同一个术语"多态"之下.比如:Polymorphism (computer science) yqj2065觉得:[(前言 page VII)好像孔乙己说"多态这个字有4种写法"一样,除了凸显多态这一术语比較多态外,并没有理论意义和教学意义,因而本书使用了一个标题--"2.1.