I'm a new user of programming c++. When I don't create a derived instance by new, it calls Base::test(). So what is the difference between Base b = d and Base* b1 = new Derived() ?
Base class
#include <iostream>
class Base
{
public:
    virtual void test() { std::cout << "Base::test()" << std::endl; };
};
Derived class
#include "Base.h"
class Derived : public Base
{
public:
    void test() { std::cout << "Derived::test()" << std::endl; };
}
main.cc
#include "Derived.h"
int main()
{
    Derived d;
    d.test();
    Base b;
    b = d;
    b.test(); // why called Base::test() ?
    Base* b1 = new Derived();
    b1->test();
    delete b1;
    return 0;
}
 
     
     
     
    