【问题标题】:Runtime polymorphism through virtual function in c++ [closed]通过 C++ 中的虚函数实现运行时多态性 [关闭]
【发布时间】:2014-08-04 13:28:38
【问题描述】:

这段代码给了我错误,它遵循基类指针来存储派生类对象。 G++ 编译器给出这样的错误“错误:在‘obj’中请求成员‘print’,它是非类类型‘base*’”

#include<iostream>
using namespace std;

class base
{
public:
    void print()
    {
        cout<<"Inside Base \n";
    }
};

class derived : public base
{
public:
    void print()
    {
        cout<<"Inside Derived \n";
    }
};

int main()
{
    base *obj;
    derived obj2;

    obj = &obj2;

    obj.print();

    return 0;
}

【问题讨论】:

  • 变量obj是一个指向类的指针,这意味着你不能使用非指针成员选择操作符.。您的问题与继承或多态无关,您只是有一个非常简单的语法错误。
  • 请注意,这里没有多态性,因为 print 没有在基类中声明为虚拟(没有创建虚拟表)

标签: c++ function polymorphism runtime virtual


【解决方案1】:

您有语法错误。另请注意,即使我将代码从 obj.print() 更改为 obj->print(),它也会引用基类中的 print()。

#include<iostream>
using namespace std;

class base
{
public:
    void print()
    {
        cout<<"Inside Base \n";
    }
};

class derived : public base
{
public:
    void print()
    {
        cout<<"Inside Derived \n";
    }
};

int main()
{
    base *obj;
    derived obj2;

    obj = &obj2;

    obj->print();

    return 0;
}

【讨论】:

  • 为什么不谈谈print() 也不是虚拟的呢?
猜你喜欢
  • 2021-12-19
  • 2012-03-04
  • 1970-01-01
  • 1970-01-01
  • 2013-07-10
  • 1970-01-01
  • 1970-01-01
  • 2010-12-13
  • 1970-01-01
相关资源
最近更新 更多