关于c++关于父类指针指向子类对象的一个问题,时间:在中午
#include <iostream>
class Base
{
public:
Base(int a)
{
this->a = a;
}
virtual void show()
{
std::cout << "父类中a的值为:"<< a << std::endl;
}
protected:
int a;
};
class Derived :public Base
{
public:
Derived(int a):Base(a)
{
this->a = a;
}
void show()
{
std::cout << "子类中a的值为:" << a << std::endl;
}
};
int main()
{
Base* base = new Derived(1);//此处用父类指针指向子类对象的方法
base->show();
}
运行结果:
#include <iostream>
class Base
{
public:
Base(int a)
{
this->a = a;
}
void show()//与上相比,此处不用virtual
{
std::cout << "父类中a的值为:"<< a << std::endl;
}
protected:
int a;
};
class Derived :public Base
{
public:
Derived(int a):Base(a)
{
this->a = a;
}
void show()
{
std::cout << "子类中a的值为:" << a << std::endl;
}
};
int main()
{
Derived* derived = new Derived(1);//此处用子类指针指向子类对象的方法
derived->show();
}
运行结果:
为什么两种情况都可以达到预期效果,而人们往往使用父类指针指向子类对象的方法呢?