【问题标题】:Interface pointers C++接口指针 C++
【发布时间】:2016-04-28 10:08:08
【问题描述】:

我无法用语言表达我的问题。请看下面的代码,希望你能理解我的问题。

我有一个类和一个接口,如下所示。

class MyInterface
{
public:
    virtual ~MyInterface(){}
    virtual void print() = 0;
};

class MyClass : public MyInterface
{
public:
    MyClass(){}
    ~MyClass(){}
    void print()
    {
       printf("Hello World\n");
    }
};

现在这是我的问题。

MyClass* myclass = new MyClass();
myclass->print(); //will print "Hello World"
MyInterface* pMyInterface = (MyInterface*)myclass;
pMyInterface->print();

第二次调用也会打印Hello World 吗?如果是,那为什么?

【问题讨论】:

  • 你试过了吗?你遇到什么问题了吗?
  • 不,还没有。我有一个项目正在进行中。
  • 似乎很快就可以尝试......
  • @Zoidberg 不能同意这一点,尤其是对于这样一个简单而基本的问题。
  • @Zoidberg 这个问题至少应该是“我试过了,结果是 X。标准能保证这个结果吗?”

标签: class pointers


【解决方案1】:

需要注意的是,您不需要像在MyInterface* pMyInterface = (MyInterface*)myclass; 中那样显式转换为可访问的基类。它是从派生类的指针/引用到可访问基类的隐式转换。

事实上,如果类不相关,这种转换可能会引入错误。

virtual function specifier 中查找更多详细信息。

【讨论】:

  • @ceptonite 我建议你阅读那篇关于virtual 函数的文章。这是非常基本的东西,没有必要在上面浪费墨水,因为它在许多教科书和参考文献中都有详细记录。
猜你喜欢
  • 2012-08-28
  • 1970-01-01
  • 2011-05-22
  • 2020-01-15
  • 2017-06-21
  • 1970-01-01
  • 1970-01-01
  • 2014-06-06
  • 1970-01-01
相关资源
最近更新 更多