访问派生类的成员
Accessing members of derived classes
我有一个基类和一个从它派生的类。在下面的示例中,Frame_Pic
是 Base_Pic
的派生类,我未包括其详细信息。 Frame_Pic
有成员、vertical
、horizontal
和不在基类中的corners
。 Picture
是一个接口类,基本上包含一个指向Base_Pic
的指针。
当我尝试在下面的reframe
函数中为这些值分配新值时,我收到一个错误,指出Base_Pic
没有这样的数据成员。
pic.p->vertical
,该操作会认为我正在访问基类。如果我将这些数据成员放在基类中,则其余函数的编写方式将无法容纳此添加。如何为这些数据成员分配?
Picture frame(const Picture& pic, char v, char c, char h)
{
Frame_Pic* temp = new Frame_Pic(pic.p);
temp->vertical = v;
temp->horizontal = h;
temp->corners = c;
Picture temp2(temp);
return temp2;
}
void reframe(Picture& pic, char v, char c, char h)
{
pic.p->vertical = v;
pic.p->horizontal = h;
pic.p->corners = c;
}
听起来你想设置派生类的项,同时为函数提供指向基类型的指针。 执行此操作的方法是在基类中创建一个虚函数,并在派生类中实现它。
例如。。。
virtual void BaseClass::SetupSomeStuff(...) {
}
void DerivedClass::SetupSomeStuff(...) {
your assignments here
}
不要直接访问它们,而是使用 Picture 接口为这些成员声明 set 和 get 方法(假设两者都需要(,并在派生类中实现它们。
对成员变量的直接访问不会以多态方式运行,因此会出现错误。
你应该重新思考你编写函数的方式以及类的一般交互方式。
Reframe 可能是 Frame_Pic
的函数成员,但其功能与类Frame_Pic
的任何实例无关。事实上,由于您只能确定Picture
持有指向Base_pic
的指针,因此它也可以持有指向不同类的实例的指针,该类派生的Base_pic
不定义名为垂直、水平或角的成员。
Frame_pic
实例,并将指针设置为Picture
该新实例。您可能还希望将这两个函数标记为static
(如果它们不是(。
相关文章:
- 为什么使用 "this" 指针调用派生成员函数?
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 如何使用基类指针引用派生类成员
- 派生类是否可以在抽象工厂设计模式中具有数据成员
- 在 C++ 中用派生类型重写成员函数
- 如果基类包含双指针成员,则派生类的构造函数
- 在派生类中绑定非静态模板化成员函数
- 为什么派生类的好友不能使用受保护的成员?
- 在派生类中使用基类的私有成员变量的最佳方法
- 派生类如何获取基的成员?
- 如何将成员函数作为参数传递并在派生对象上执行方法列表
- 调用派生类成员函数
- 从模板化父类中的派生内部类访问受保护的成员变量
- 将基类的成员函数重载到其他派生类C++
- 派生的成员 通过指向基、static_cast、crtp、删除模板的指针
- C++ 使用派生类方法更改基类数据成员
- 派生类看不到基类成员
- 使用派生类中的静态成员而不是基类
- 是否可以使用 using 将基类中的公共成员重新声明为派生类中的私有成员?
- 如何将派生类中的成员函数作为回调传递?