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

#include <iostream>
#include <vector>
#include <memory>
using namespace std; class A {
public:
virtual void init() = ;
}; 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 = ; }
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>());
for (auto &item : list) {
item->init();
}
((D*)list[].get())->print();
return ;
}

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

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

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

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();

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

  1. Tensorflow官方文档中文版——第二章(瞎奖杯写)

    包含如下几个部分: 1.面向机器学习初学者的 MNIST 初级教程 2.面向机器学习专家的 MNIST 高级教程 3.TensorFlow 使用指南 4.卷积神经网络 5.单词的向量表示(word e ...

  2. 洛谷P2173 [ZJOI2012]网络(10棵lct与瞎jb暴力)

    有一个无向图G,每个点有个权值,每条边有一个颜色.这个无向图满足以下两个条件: 对于任意节点连出去的边中,相同颜色的边不超过两条. 图中不存在同色的环,同色的环指相同颜色的边构成的环. 在这个图上,你 ...

  3. 瞎JB逆

    P为质 ; long long quickpow(long long a, long long b) { ) ; ; a %= mod; while(b) { ) ret = (ret * a) % ...

  4. [bzoj1707]tanning分配防晒霜_贪心+排序

    tanning分配防晒霜 bzoj-1707 题目大意:给出每个点所能接受的区间,给出m个可以使单个点固定在一个值的方法,每种方法能使用有限次. 注释:1<=N<=2500 想法:这题是瞎 ...

  5. C#设计模式整理

    我居然连一月一随笔都没有,啊啊啊,忙死个人 这个随笔主要是记录基于自己学习[美]James W.Cooper著的<C# Design Patterns : A Tutorial>一书中常用 ...

  6. sdoi2018酱油鸡

    ruand1滚粗啦,然后过来写游记 四月是你の省选... day -1 老师突然告诉我们说 day2 回来参加月考,心态爆炸. day0 坐车,颓,和队爷zpd补了b站翻唱2017top100,晚上收 ...

  7. CTSC2017游记&心得记

    先来占个坑,骗点访问量 相册地址,戳这里 Day-1 一大清早就被叫了起来,赶去回车站....结果到了那里发现早了快1h?exm?是谁一早清早扰人清梦QAQ 杭州东转车,看到5号检票口被乘警团团围了起 ...

  8. C/C++ 宏操作小技巧

    Abstract 之前写了一个非常mini的log库(也不算库把,自己瞎jb写的),里面几乎都是宏的实现.这里打算趁热打铁,把自己知道的几下子都贴出来,后续如果有新的收获会更新这个博文. 文笔拙劣,主 ...

  9. 安卓开发(3)—1— Activity

    安卓开发(3)-1- Activity 3.1 Activity是什么: 在前面安卓概述中有提到,Activity是Android开发中的四大组件,所有在app里可以看到的东西都是Activity里面 ...

随机推荐

  1. 《Node.js+MongoDB+AngularJS Web开发》读书笔记及联想

    总体介绍 <Node.js+MongoDB+AngularJS Web开发>,于2015年6月出版,是一本翻译过来的书,原书名为<Node.js,MongoDB and Angula ...

  2. iOS7 UI兼容 导航栏按钮边框 UINavigationItem left and right padding

    iOS7之前的UI为: 而在iOS7中,由于设计方面的原因,使得UI变为: 修改的方法重写UINavigationItem的setLeftBarButtonItem和setRightBarButton ...

  3. 2. npm 的使用

    NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种: 允许用户从NPM服务器下载别人编写的第三方包到本地使用. 允许用户从NPM服务器下载并 ...

  4. Oracle备份表结构和数据

    --创建一份表结构 create table BASE_GOODSPAYMENT_SETTING_BAK as select * from BASE_GOODSPAYMENT_SETTING ; -- ...

  5. Fluent NHibernate other example

    测试用的当前最新版本: sql: --- CREATE TABLE Users ( UserID INT IDENTITY(1,1) PRIMARY KEY, [Name] VARCHAR(50) N ...

  6. sql:MySQL 6.7 表,视图,存储过程结构查询

    #数据库MySQL 6.7 use sakila; #查询表名 show tables; # SELECT TABLE_NAME,TABLE_ROWS FROM INFORMATION_SCHEMA. ...

  7. 用Perl编写Apache模块

    前言 Apache被许多大流量网站所嫌弃,但很多企业级的场景则更为适用. Apache httpd 从 2.0 之后,已经不仅仅局限于一个 http 的服务器,更是一个完善而强大.灵活而健壮且容易扩展 ...

  8. ThinkPHP系的两个东东OneThink和ThinkCMF

    假设有这样一个命题:需要对一个已有系统进行移植,有没有什么系统是适合用来作为进行快速移植的基础的.能解决每个系统的基本问题,只需考虑相关业务逻辑问题. OneThink是TP团队官方出品. http: ...

  9. [译] 你应该升级 MQTT3.1.1 的6个理由

    原文 6 facts why it’s worth upgrading to the brand new MQTT 3.1.1version 摘要:新版 MQTT 3.1.1 终于在 2014 年 1 ...

  10. mysql命令行备份数据库

    MySQL数据库使用命令行备份|MySQL数据库备份命令 例如: 数据库地址:127.0.0.1 数据库用户名:root 数据库密码:pass 数据库名称:myweb 备份数据库到D盘跟目录 mysq ...