C++ c++;使用基类中的指针访问派生类
编译器一直说C++ c++;使用基类中的指针访问派生类,c++,pointers,derived,C++,Pointers,Derived,编译器一直说“class A”没有名为“foo”的成员。 我试图使用一个带有指针的派生类的函数。这是我的密码: class A{ ..... }; class B:public A{ virtual void foo() = 0; }; class C:public B{ .... public: void foo(){ .... } }; 我有一个名为table的a指针表 Table[j]->foo() 我得到了编译器错误 除了ca
“class A”没有名为“foo”的成员。
我试图使用一个带有指针的派生类的函数。这是我的密码:
class A{
.....
};
class B:public A{
virtual void foo() = 0;
};
class C:public B{
....
public:
void foo(){
....
}
};
我有一个名为table
的a
指针表
Table[j]->foo()
我得到了编译器错误
除了cast,我应该怎么做?您有一个编译错误,因为函数
foo
没有在类a
中声明
您可以在A
中将其声明为纯虚拟,如下所示:
class A {
virtual void foo() = 0;
};
在派生类中,您不必显式地将foo
声明为virtual
。如果只有C
是一个具体的类,那么您根本不必在类B
中声明foo
如果您的示例知道,在指向A
的指针数组中,您只有类C的实例,您可以显式地强制转换指向C
的指针,但这是设计不良的标志,我不推荐:
static_cast<C*>(Table[j])->foo()
static_cast(表[j])->foo()
您有一个编译错误,因为函数foo
未在类a
中声明
您可以在A
中将其声明为纯虚拟,如下所示:
class A {
virtual void foo() = 0;
};
在派生类中,您不必显式地将foo
声明为virtual
。如果只有C
是一个具体的类,那么您根本不必在类B
中声明foo
如果您的示例知道,在指向A
的指针数组中,您只有类C的实例,您可以显式地强制转换指向C
的指针,但这是设计不良的标志,我不推荐:
static_cast<C*>(Table[j])->foo()
static_cast(表[j])->foo()
如果您有一个指向基的指针,并且希望访问派生类型的成员,则必须强制转换以使您有一个指向派生类型的指针,或者在您的示例中添加foo()
作为基的虚拟成员
class A
{ ... };
class B : public A:{
{
public:
virtual foo() { std::cout << "B::foo" << std::endl; }
};
class C : public B
{
public:
void foo() { std::cout << "C::foo" << std::endl;
};
...
A * arr[8];
for(int i = 0; 8>i; ++i)
arr[i] = new C;
((B*)arr[0])->foo(); // will print "C::foo\n"
A类
{ ... };
B类:公共A类:{
{
公众:
virtual foo(){std::cout如果您有一个指向基的指针,并且希望访问派生类型的成员,则必须强制转换,以便有一个指向派生类型的指针,或者像您的例子一样,将foo()
作为虚拟成员添加到基
class A
{ ... };
class B : public A:{
{
public:
virtual foo() { std::cout << "B::foo" << std::endl; }
};
class C : public B
{
public:
void foo() { std::cout << "C::foo" << std::endl;
};
...
A * arr[8];
for(int i = 0; 8>i; ++i)
arr[i] = new C;
((B*)arr[0])->foo(); // will print "C::foo\n"
A类
{ ... };
B类:公共A类:{
{
公众:
虚拟foo(){std::无法将纯虚函数移动到A
?这是您实际尝试使用的多态类型。因此,不要在B
中定义它。它不会有它。是什么让您产生这种想法的?只适用于必须是具体的派生类classes@Jokk-不,它不..将纯虚拟函数移动到A
?这是您操作的类型通常尝试使用多态性。所以不要在B
中定义它。它不会有多态性。是什么让你有了这个想法?只适用于必须是具体的派生类classes@Jokk-不,它不…“aaarrrrggghhh”在C风格的演员阵容中。没有理由不使用静态演员阵容
或动态演员阵容
。“aaarrrrggghh”在C风格的演员阵容中。没有理由不在这里使用静态演员阵容
或动态演员阵容
。