无法通过指针或对象 c++ 访问受保护的成员
Protected member is not accessible through a pointer or object c++
Visual studio告诉我,我无法访问父类的成员变量和父类的实例。 像这样:
class Point{
protected:
int x, y;
};
class Quadrilateral : public Point
{
protected:
Point A, B, C, D;
};
class Trapezoid : public Quadrilateral
{
public:
bool isTrapezoid() {
if (A.y == B.y && C.y == D.y)
return true;
return false;
}
};
据说Point::y
无法通过指针或对象访问。谁能告诉我为什么?
继承意味着您可以访问基类的受保护成员,这意味着在您的情况下,Point::y 可以用作类内的四边形::y 和梯形::y,这并不意味着您可以从任何其他 Point 对象访问 y,如果它们是><成员,也不能。仅仅为了访问>所以梯形可以访问 A,因为继承,但它无法访问 A.y,因为成员 A 的可访问性与问题中的继承无关。
正如Michael Walz所评论的那样,如果你不希望Point的成员是公开的或通过成员函数访问的,你可以将Trapezoid声明为Point的友元类,这使得Point的所有成员都可以被梯形访问。 但是,滥用此功能可能会导致意外问题。
Point
有受保护的成员,难怪他们无法访问。你应该把它们公开。
其他要点:
-
Quadrilateral
不应该继承Point
,因为这没有意义。 - 有些语法不是真正的C ++,你应该修复它(例如
class class
、代码内部的参数列表isTrapezoid
。 - 使
isTrapezoid
成为可以在Quadrilateral
上调用的方法,这应该是一个const
的方法。 - 对于像这样的简单类,也许你应该让所有成员都公开(取决于你的代码设计(。
class Point
{
public:
int x, y;
};
class Quadrilateral
{
public:
Point a, b, c, d;
bool isTrapezoid() const
{
return a.y == b.y && c.y == d.y;
}
};
相关文章:
- 通过方法访问结构
- 使用不带参数的函数访问结构元素
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- 用于访问容器<T>数据成员的正确 API
- 访问者访问变体并返回不同类型时出错
- 尝试通过多个向量访问变量时,向量下标超出范围
- 无法访问嵌套类.类的使用无效
- 写入位置0x0000000C时发生访问冲突
- 我们可以访问一个不存在的联盟的成员吗
- C++从另一个类访问公共静态向量的正确方法是什么
- 我的简单if-else语句是如何无法访问的代码
- 从C++dll访问C#中的一行主要参数
- 概念TS检查忽略私有访问修饰符
- 访问被拒绝后,c++中的故障保护代码
- 在c++中访问int到类对象的映射时出错
- 我想访问std::unique_ptr中的一个特定元素
- 为什么示例代码访问IUnknown中已删除的内存
- C++:无法访问声明的受保护成员
- 通过指向指针数组的指针访问子类的属性
- 如何使用单独文件中的派生类访问友元函数对象