【问题标题】:copying a pointer created dynamically in array of pointers复制在指针数组中动态创建的指针
【发布时间】:2014-08-03 04:18:02
【问题描述】:

我是初学者,在尝试将一个指针复制到指针数组中的对象时遇到问题..

 class Publication
 {
  char title[20];
  int idd;
public:

char* getT()
{
    return title;
}

virtual void getData()
{
    cout<<"Enter Title of Book";
    cin>>title;
    cout<<"Enter ID of Book";
    cin>>idd;
}
virtual void putData()
{

    cout<<"Title of Book : "<<title<<"\n";
    cout<<"ID of Book : "<<idd;
}
};

 class Book:private Publication
  {
    int pages;
  public:
    void getData()
    {
    cout<<"Enter Title of Book";
    cin>>getT();
    cout<<"Enter Pages ";
    cin>>pages;
    }
    void putData()
    {
        cout<<"Title of Book : "<<getT()<<"\n";
        cout<<"No of Pages : "<<pages;
    }
   };

主要功能

int main()
 {
  Publication *ptrpub[2];
  Book *ptr;

for(int i=0;i<2;i++)
{
    cout<<"Enter Data for Book Object";
    ptr=new Book; 
    ptr->getData();

现在在这个循环中,我想将该指针移动到指向出版物的指针数组中,即 ptrpub[],其中 Book 类从 Publication Privately 继承

  ptrpub[i]=ptr;         //'Publication' is an inaccessible base of 'Book'

有什么方法可以复制它们,所以我可以使用 ptrpub[i]->putdata() 来显示为书籍对象输入的所有数据.. 我必须保持 Book 和 Publication 类之间的这种关系。

【问题讨论】:

  • 使用 std::stringstd::vector 而不是指针。这些类知道如何复制自己。

标签: c++ arrays class oop pointers


【解决方案1】:

问题是你从Publication私下继承Book

class Book:private Publication

这意味着只有 Book 的实现知道它是从 Publication 继承的——类外部的代码不知道这一点,因此您不能将 Book 转换为 Publication,除非从成员内部的Book(或朋友成员)。

您可以通过公开继承来解决此问题:

class Book:public Publication

【讨论】:

  • 但是如果我必须保持这种关系怎么办,还有其他方法吗?
  • @Kashif 你保持关系,你只是暴露关系存在。在这种特殊情况下,我不明白为什么这会很糟糕。 (您想要私有继承是相当罕见的,而且这看起来不像这种情况。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-07
  • 1970-01-01
  • 1970-01-01
  • 2017-04-12
  • 2012-03-09
  • 2013-04-06
  • 2020-11-18
相关资源
最近更新 更多