再谈“在STL列表(Lists)中插入不同类型的对象”

看到贵网站上的一篇文章:“在STL列表(Lists)中插入不同类型的对象”。我觉得该文回答还没有指出问题的本质,所以本人提出我的观点,恳请指正。本人认为,错误产生的原因在于指针转化过程中,程序没有指出该指针最初的原型,或者说,由于未找到正确的子类函数地址才发生调用错误的,本人原代码如下:用Dev-cpp的g++编译通过。

#include<iostream>
#include<algorithm>
#include <vector>
#include <string>
/**
* 父类:synObject
*/
class synObject {
public :
  synObject();
  string GetClass();
  string className;
};
synObject::synObject()
{
  className = "synObject";
}
string synObject::GetClass()
{
  return className;
}
/**
* 子类1:synPin
*/
class synPin : public synObject {
  string pin;
public :
  synPin();
  void  SetPin(string Pin);
  string GetPin();
private:
};
synPin::synPin()
{
  className = "synPin";
}
void synPin::SetPin(string Pin)
{
  pin = Pin;
}
string synPin::GetPin()
{
  return pin;
}
/**
* 子类2:synCell
*/
class synCell : public synObject {
  string cell;
public :
  synCell();
  void  SetCell(string Cell);
  string GetCell();
private:
};
synCell::synCell()
{
  className = "synCell";
}
void synCell::SetCell(string Cell)
{
  cell = Cell;
}
string synCell::GetCell()
{
  return cell;
}
/**
* 系统运行主程序
*/
int main()
{
  file://生成对象
  synObject * pMyObject;
  pMyObject = new synObject;
  synPin * pMyPin;
  pMyPin = new synPin;
  pMyPin->SetPin("myPin");
  synCell * pMyCell;
  pMyCell = new synCell;
  pMyCell->SetCell("myCell");
  //插入对象
  vector<synObject *> MyVector;
  MyVector.empty();
  MyVector.push_back(pMyObject);
  MyVector.push_back(pMyPin);
  MyVector.push_back(pMyCell);
  //调用对象
  vector<synObject *>::iterator ThisVector=MyVector.begin();
  cout<<"Program begin here:"<<endl;
  while( ThisVector != MyVector.end() )
  {
    cout << (**ThisVector).GetClass() << endl ;
    
    if ( (**ThisVector).GetClass().compare("synCell") == 0)
    {
      cout << (**((synCell**)ThisVector)).GetCell() << endl ;
    }
    
    if ( (**ThisVector).GetClass().compare("synPin") == 0)
    {
      cout << (**(synPin**)ThisVector).GetPin() << endl ;
    }
    ThisVector++;
  }
}
//程序结束

时间: 2024-06-15 13:16:51

再谈“在STL列表(Lists)中插入不同类型的对象”的相关文章

在STL列表(Lists)中插入不同类型的对象

[问题]: 我的目的是创建一个不同类型对象的容器.首先从同一个类派生了所有需要的类,然后将它们压入容器中.请看下列代码: synObject为基类,synPin 和 synPin 是从基类中派生的子类,class synObject { public : synObject(); string GetClass(); string className; }; synObject::synObject() { className = "synObject"; } string synOb

[译]再谈如何安全地在 Android 中存储令牌

本文讲的是[译]再谈如何安全地在 Android 中存储令牌, 原文地址:A follow-up on how to store tokens securely in Android 原文作者:Enrique López Mañas 译文出自:掘金翻译计划 译者: lovexiaov 校对者:luoqiuyu hackerkevin 作为本文的序言,我想对读者做一个简短的声明.下面的引言对本文的后续内容而言十分重要. 没有绝对的安全.所谓的安全是指利用一系列措施的堆积和组合,来试图延缓必然发生的

sql server-sqlserver向orcle中插入date类型数据

问题描述 sqlserver向orcle中插入date类型数据 如题,sqlserver语句向orcle数据库中插入date类型的数据. 解决方案 INSERT INTO中使用这个,转换 TO_DATE(sql_server_value,'YYYY.MM.DD HH24:MI:SS')

再谈矩阵分解在推荐系统中的应用

本文将简单介绍下最近学习到的矩阵分解方法. (1)PureSvd 矩阵分解的核心是将一个非常稀疏的评分矩阵分解为两个矩阵,一个表示user的特性,一个表示item的特性,将两个矩阵中各取一行和一列向量做内积就可以得到对应评分. 那么如何将一个矩阵分解为两个矩阵就是唯一的问题了.说到这里大家就可能想起了在线代和数值分析中学到的各种矩阵分解方法,QR,Jordan,三角分解,SVD... 这里说说svd分解. svd是将一个任意实矩阵分解为三个矩阵U,S,V,其中,U,V是两个正交矩阵,称为左右奇异

[译] 再谈 CSS 中的代码味道

本文讲的是[译] 再谈 CSS 中的代码味道, 原文地址:Code Smells in CSS Revisited 原文作者:Harry 译文出自:掘金翻译计划 译者:IridescentMia 校对者:rccoder, Germxu 再谈 CSS 中的代码味道 回到 2012 年,我写了一篇关于潜在 CSS 反模式的文章 CSS中的代码味道.回看那篇文章,尽管四年过去了,我依然认同里面的全部内容,但是我有一些新的东西加到列表中.再次说明,这些内容并不一定总是坏的东西,因此把它们称为代码味道:在

用户交互设计:再谈人机交互中的设计隐喻

文章描述:再谈人机交互中的设计隐喻. 上篇文章<人机交互中的设计隐喻-由Mac的文件替换引出来的话题>发出来以后收到了各种各样的反馈,我索性再写一篇续文,算是集中答复吧. 用户习惯 在所有的反馈中,"用户觉得Windows的做法更好用,所以理应这样设计"的说法可谓最多.那么我们就来看一下,为什么有人会觉得Windows的做法更"好用". 我们来看两个例子. 银行里面用的系统-就是柜台后面业务人员用的那个-基本上还是字符界面,没有漂亮的图标和窗口,甚至可能

如何在word中插入多级列表

  1.打开Word2007文档窗口,在"开始"功能区的"段落"分组中单击"多级列表"按钮.在打开的多级列表面板中选择多级列表的格式. 2.按照插入常规编号的方法输入条目内容,然后选中需要更改编号级别的段落.单击"多级列表"按钮,在打开的面板中指向"更改列表级别"选项,并在打开的下一级菜单中选择编号列表的级别. 3.返回Word2007文档窗口,可以看到创建的多级列表.

如何在word2007中插入多级列表

  1.打开Word2007文档窗口,在"开始"功能区的"段落"分组中单击"多级列表"按钮.在打开的多级列表面板中选择多级列表的格式. 2.按照插入常规编号的方法输入条目内容,然后选中需要更改编号级别的段落.单击"多级列表"按钮,在打开的面板中指向"更改列表级别"选项,并在打开的下一级菜单中选择编号列表的级别. 3.返回Word2007文档窗口,可以看到创建的多级列表.

再谈Javascript中的基本类型和引用类型(推荐)_javascript技巧

一.基本类型和引用类型概述 js中数据类型的值包括:基本类型值和引用类型值 基本数据类型:undefined;null;boolean;number;string 引用类型值:保存在内存中,js不允许直接访问内存位置,因此时操作引用而不是实际对象 二.如何检测数据类型 1.基本数据类型的检测:使用typeof var s = "AAA"; alert(typeof s); //返回string 2.引用类型(对象类型)检测:使用instanceof alert(person insta