相关疑难解决方法(0)

多态在没有指针/引用的情况下在C++中工作吗?

可能重复:
虚函数对象切片

让我们考虑一下:

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

struct A {
    virtual void do_it() { cout << "A" << endl; } 
};

struct B : public A {
    virtual void do_it()  { cout << "B" << endl; } 
};

int main() {
    vector<A> v;
    v.push_back(B());
    v[0].do_it(); // output is A
}
Run Code Online (Sandbox Code Playgroud)

哪个功能会被调用?如果不存在切片,基本上可以使用不带指针的多态性吗?

c++ object-slicing

7
推荐指数
4
解决办法
2088
查看次数

使用解除引用对象调用虚函数

我有一个指向派生类对象的基类指针.我foo()在下面的代码中使用两种不同的方式调用函数.为什么Derived::foo()在第一种情况下被调用?不应该(*obj).foo()调用Base::foo()函数,因为它已被解除引用?

    class Base
    {
    public:
        Base() {}
        virtual void foo() { std::cout << "Base::foo() called" << std::endl; }
        virtual ~Base() {};
    };

    class Derived: public Base
    {
    public:
        Derived() : Base() {}
        virtual void foo() {  std::cout << "Derived::foo() called" << std::endl; }
        virtual ~Derived() {};
    };

    int main() {
        Base* obj = new Derived();
   // SCENARIO 1
        (*obj).foo();
// SCENARIO 2
        Base obj1 = *obj;
        obj1.foo();

        return 0;
    }
Run Code Online (Sandbox Code Playgroud)

c++ inheritance

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

标签 统计

c++ ×2

inheritance ×1

object-slicing ×1