ParentClass是ChildClass的不可访问的基 我在C++中写了以下代码,但是我得到了一个不可访问的类型错误,但是当我继承父类时,父级都很好。我已经搜索了这个问题,但没有得到任何结果。 请帮助我做好这件事,这是我的任务,我必须私下继承这些类 #include<iostream> using namespace std; class publication { private: string name; int id; public: virtual void getdata() { cout<<"Enter Name: "; cin>>name; cout<<"Enter ID: "; cin>>id; } virtual void putdata () { cout<<name; cout<<id; } }; class book: private publication { private: int pages; public: void getdata() { publication::getdata(); cout<<"Enter Pages: "; cin>>pages; } void putdata () { publication::putdata(); cout<<pages; } }; class tape: private publication { private: float ptime; public: void getdata() { publication::getdata(); cin>>ptime; } void putdata () { publication::putdata(); cout<<time; } }; int main() { publication *ptr[2]; ptr[0] = new book; ptr[0]->getdata(); ptr[0]->putdata(); ptr[1] = new tape; ptr[1]->getdata(); ptr[1]->putdata(); } #包括 使用名称空间std; 班级出版物 { 私人: 字符串名; int-id; 公众: 虚拟void getdata() { coutname; 库蒂德; } 虚拟数据() { cout

ParentClass是ChildClass的不可访问的基 我在C++中写了以下代码,但是我得到了一个不可访问的类型错误,但是当我继承父类时,父级都很好。我已经搜索了这个问题,但没有得到任何结果。 请帮助我做好这件事,这是我的任务,我必须私下继承这些类 #include<iostream> using namespace std; class publication { private: string name; int id; public: virtual void getdata() { cout<<"Enter Name: "; cin>>name; cout<<"Enter ID: "; cin>>id; } virtual void putdata () { cout<<name; cout<<id; } }; class book: private publication { private: int pages; public: void getdata() { publication::getdata(); cout<<"Enter Pages: "; cin>>pages; } void putdata () { publication::putdata(); cout<<pages; } }; class tape: private publication { private: float ptime; public: void getdata() { publication::getdata(); cin>>ptime; } void putdata () { publication::putdata(); cout<<time; } }; int main() { publication *ptr[2]; ptr[0] = new book; ptr[0]->getdata(); ptr[0]->putdata(); ptr[1] = new tape; ptr[1]->getdata(); ptr[1]->putdata(); } #包括 使用名称空间std; 班级出版物 { 私人: 字符串名; int-id; 公众: 虚拟void getdata() { coutname; 库蒂德; } 虚拟数据() { cout,c++,inheritance,C++,Inheritance,您正在使用私有继承。这意味着您继承了超类的字段和方法,但您只能从类本身内部或从它的朋友类和函数中访问它们。其他函数甚至不知道继承存在,并且可能不会像基类的实例那样使用子类 您正在main中使用子类。您创建子类类型的新对象,但随后(隐式)将它们转换为指向超类的指针。由于main不是子类的友元函数,因此不允许将子类当作基类来使用。因此编译器会给您一个错误 在这种情况下使用公共继承似乎是正确的,因为所有函数都知道“book”和“tape”是“publication”的子类.您使用的是私有继承。这意味着

您正在使用私有继承。这意味着您继承了超类的字段和方法,但您只能从类本身内部或从它的朋友类和函数中访问它们。其他函数甚至不知道继承存在,并且可能不会像基类的实例那样使用子类

您正在main中使用子类。您创建子类类型的新对象,但随后(隐式)将它们转换为指向超类的指针。由于main不是子类的友元函数,因此不允许将子类当作基类来使用。因此编译器会给您一个错误


在这种情况下使用公共继承似乎是正确的,因为所有函数都知道“book”和“tape”是“publication”的子类.

您使用的是私有继承。这意味着您继承了超类的字段和方法,但您只能从类本身或其朋友类和函数中访问这些字段和方法。其他函数甚至不知道继承存在,并且可能不会像基类的实例那样使用子类

您正在main中使用子类。您创建子类类型的新对象,但随后(隐式)将它们转换为指向超类的指针。由于main不是子类的友元函数,因此不允许将子类当作基类来使用。因此编译器会给您一个错误


在这种情况下使用公共继承似乎是正确的,因为所有函数都知道“book”和“tape”是“publication”的子类.

编译器是正确的:指向
book
tape
类型的对象的指针不能转换为指向
publication
类型的对象的指针,因为
publication
是一个私有基。如果需要使用私有基,则需要在代码的其余部分执行不同的操作,但在代码应该做什么的问题上没有任何提示,所以这里真的不可能再多说了。

编译器是正确的:指向
book
tape
类型的对象的指针不能转换为指向
publication
类型的对象的指针,因为
publication
是一个私有的ba如果你被要求使用私有基,那么你需要在代码的其余部分做一些不同的事情,但是在代码应该做什么的问题上没有任何提示,所以这里真的不可能再多说了。

当你在子类中继承时,这意味着父类的所有函数和数据也属于子类。因此,您应该使用->getdata not publication::getdata调用getdata函数。继承总是让我感到困惑,所以我不是100%确定。但我相信它是有效的。

当您在子类中拥有继承时,这意味着父类的所有函数和数据也属于子类。因此,您应该调用getdata函数与此->getdata not publication::getdata.Inheritation总是让我感到困惑,所以我不是100%确定。但我相信它是有效的。

我已经做到了。 这可以通过使book类和tape类成为主要函数的朋友来实现。我们现在不必公开继承这些类。

我已经完成了。 这可以通过使book类和tape类成为主要函数的朋友来实现。我们现在不必公开继承这些类