これら 2 つのプログラムのうち、2 番目のプログラムは機能しますが、最初のプログラムはコンパイルされません。そんなことがあるものか?唯一の違いは、バージョン 2 では bar がポインターであり、バージョン 1 ではポインターではないことです。
バージョン 1: (コンパイルしません)
#include <iostream>
class Foo{
    public:
        void print(){
            std::cout << "asdasd" << std::endl;
        }
};
class Bar : public Foo{
};
int main(){
    Bar bar();
    bar.print();
}
そして2番目のバージョン:
#include <iostream>
class Foo{
    public:
        void print(){
            std::cout << "asdasd" << std::endl;
        }
};
class Bar : public Foo{
};
int main(){
    Bar* bar = new Bar();
    bar->print();
}