是否可以使用相同的基类从另一个派生对象访问派生对象

Is it possible to access a derived object from another derived object both using the same base class?

本文关键字:派生 对象 另一个 访问 基类 可以使 是否      更新时间:2023-10-16

我有一个抽象的基础Object类和两个派生类:PaddleBallPaddle 的构造函数接受指向Ball的指针作为参数,以便我可以获取它的位置来计算桨的运动:

Paddle::Paddle(Vec location, Vec size, float AIspeed, Ball* prtBall)
    :  Object(location, size)
{
    /* ... */
    gameBall = ptrBall;
}

IntelliSense不会将其标记为无效,但是每当我编译代码时,VS2013都会意外地抛出以下错误:

1>objectpaddle.h(8): error C2061: syntax error : identifier 'Ball'
1>objectpaddle.h(43): error C2143: syntax error : missing ';' before '*'
1>objectpaddle.h(43): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>objectpaddle.h(18): error C2065: 'gameBall' : undeclared identifier
1>objectpaddle.h(18): error C2065: 'ptrBall' : undeclared identifier
1>objectpaddle.h(30): error C2065: 'gameBall' : undeclared identifier

前两个特别有趣...从外观上看,编译器无法识别Ball*是一种类型。第 8 行是上面的行,这些是第 40-44 行:

private:
    void Foo();
    Ball* gameBall;
    float bar;

起初我以为我忘了在文件paddle.h中包含Ball的定义。但事实并非如此。我正在做的事情是否正确,还是目前存在被忽视的缺陷?

是的,前提是对同级数据成员或方法的访问权限是公共的。

同级

无权访问其他同级的私有或受保护的数据方法和数据成员。

您可以在父类中创建虚拟方法。 然后,一个同级可以通过父级(通过函数)获取数据;但正如我所了解到的,当你直接与你的兄弟姐妹交谈而不是通过父母时,生活会更好。:-)