ParentClass是ChildClass的一个不可访问的基
ParentClass is an inaccessible base of ChildClass
我正在用c++编写以下代码,但我遇到了一个不可访问的类型错误,但当我与parent一起公开继承子类时,一切都很顺利。我搜索过这个问题,但没有得到任何结果。请帮我做好这件事,这是我的任务,我必须私下继承课程。
#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();
}
编译器是对的:指向book
和tape
类型对象的指针不能转换为指向publication
类型对象的指示器,因为publication
是私有基。如果你被要求使用私有库,那么你需要在代码的其余部分做一些不同的事情,但在代码应该做什么的问题上没有任何提示,所以这里真的不可能再多说什么了。
当您在Childclass中具有继承时,这意味着Parentclass的所有函数和数据也属于child。因此,您应该使用这个->getdata而不是publication::getdata来调用getdata函数。继承总是让我感到困惑,所以我不能百分之百确定。但我相信它是有效的。
您使用的是私有继承。这意味着您继承了超类的字段和方法,但您只能从类本身或其朋友类和函数中访问它们。其他函数甚至不知道继承的存在,并且可能不会像基类的实例那样使用子类。
您正在main中使用您的子类。创建子类类型的新对象,然后(隐式)将它们强制转换为指向超类的指针。由于main不是子类的友元函数,所以不允许将子类当作基类来使用。因此编译器会给你一个错误。
在这种情况下,使用公共继承似乎是正确的。由于所有函数都可能知道"book"answers"tape"是"publication"的子类。
我已经完成了。这可以通过使书籍类和磁带级的主要功能成为朋友来实现。我们现在不必公开继承这些类。
相关文章:
- 我们可以访问一个不存在的联盟的成员吗
- C++从另一个类访问公共静态向量的正确方法是什么
- 我想访问std::unique_ptr中的一个特定元素
- 最佳做法是从另一个线程访问 qml 中的Q_PROPERTY
- 编写一个函数来删除单链表中的节点(尾部除外),仅授予对该节点的访问权限
- Qt:从另一个窗口访问公共对象
- 给定一个C++嵌套的私有结构类型,是否有从文件范围静态函数访问它的策略
- 使用 map.end() 访问 map 的最后一个元素
- 访问 for_each 函数中的前一个元素
- 访问 std:vector 的类成员 std:vector 在一个类中与另一个 std:vector
- 我遇到了一个糟糕的访问问题
- 如果类"A"具有指向另一个类的指针,则"B" A 可以访问 B 类公共方法
- 复制赋值函数如何访问另一个对象的私有成员(Stroustroup 原则和实践书)?
- 无法从 Visual Studio C++ 中的另一个类访问一个类
- 如何使用指针从另一个类访问属性
- C++:在进行切片时对迭代器的约定,特别是对于访问最后一个元素并最终将其删除
- 创建一个类来访问和指定向量类型,并构建一个获取位置并为其分配区域的类
- 使用 C++ 的代码块 我正在尝试从我的类中打印出一个访问器函数。 错误指出请求成员get_address
- Direct X使用C++,当我在FX文件中找到一种技术时,我收到了一个访问违规
- glMapBufferRange给了我一个访问冲突