相关疑难解决方法(0)

关于多态性的引用和指针是否相同?

我一直认为必须使用指针进行多态性.使用规范示例:

DrawEngine::render(Shape *shape)
{
    shape->draw();
    shape->visible(true);
}
Run Code Online (Sandbox Code Playgroud)

并将指针传递给各种Shape派生类.它与引用一样吗?

DrawEngine::render(Shape &shape)
{
     shape.draw();
     shape.visible(true);
}
Run Code Online (Sandbox Code Playgroud)

甚至有效:

engine.render(myTriangle); // myTriangle instance of class derived from Shape
Run Code Online (Sandbox Code Playgroud)

如果这样可行,这两种情况之间是否存在差异?我试图在Stroustrup中找到信息,但我一无所获.

我重新打开了这个,因为我想再探索一下.

所以至少有一个区别是dynamic_cast.对我来说,多态性包括使用dynamic_cast.

我可以去吗

Rhomboid & r = dynamic_cast<Rhomboid &>(shape);
Run Code Online (Sandbox Code Playgroud)

如果演员表失败会怎么样?这有什么不同吗?

Rhomboid * r = dynamic_cast<Rhomboid*>(&shape);
Run Code Online (Sandbox Code Playgroud)

c++ polymorphism reference

41
推荐指数
2
解决办法
1万
查看次数

C++虚方法混淆

我有一个关于继承和虚方法的基本C++问题.

请考虑以下代码:

#include <iostream>
#include <vector>
using namespace std;

class A {
public:
  virtual void f() {cout << "A\n";};
};

class B : public A {
public:
  void f() {cout << "B\n";};
};

int main() {
  A a;
  B b;
  vector<A> v;
  v.push_back(a);
  v.push_back(b);

  for (int i = 0; i < v.size(); ++i)
    v.at(i).f();
}
Run Code Online (Sandbox Code Playgroud)

如果我执行此代码,它会打印出来

A
A
Run Code Online (Sandbox Code Playgroud)

我不明白为什么它不打印

A
B
Run Code Online (Sandbox Code Playgroud)

因为"f"方法被声明为虚拟.我想知道为什么程序以这种方式运行.

提前致谢

c++ methods virtual inheritance

1
推荐指数
1
解决办法
109
查看次数

标签 统计

c++ ×2

inheritance ×1

methods ×1

polymorphism ×1

reference ×1

virtual ×1