1.重写只会覆盖函数,但是参数不会被覆盖
class Base
{
public:
virtual void ShowText(std::string text = "argus From class Base") {
std::cout << "Base , " << text << std::endl;
}
};class Son : public Base
{
public:
virtual void ShowText(std::string text = "argus From class Son") {
std::cout << "Son , " << text << std::endl;
}
};int main()
{
Base* ptr = new Son();
ptr->ShowText();
}//输出结果 Son , argus From class Base
2.const关键字会影响重写
如下例子所示,当父类的Test()后面带const的而子类不带时
就不构成重写。运行结果为
//运行结果
Base Test
Son Test
class Base
{
public:
virtual void Test() const {
std::cout << "Base Test" << std::endl;
}
};class Son : public Base
{
public:
void Test(){
std::cout << "Son Test" << std::endl;
}
};int main()
{
Base* basePtr = new Son();
Son* sonPtr = dynamic_cast<Son*>(basePtr);
basePtr->Test();
sonPtr->Test();
}、
//运行结果
Base Test
Son Test
当本例子中 父类和子类的 Test()都加上 const ,或者都减去const时
运行结果为
Son Test
Son Test
3.有指针或引用时,面向对象才会生效
class Base
{
public:
virtual void Test() {
std::cout << "Base Test" << std::endl;
}
};class Son : public Base
{
public:
void Test() {
std::cout << "Son Test" << std::endl;
}
};void Test1(Base base) {
base.Test();
}void Test2(Base& base) {
base.Test();
}int main()
{
Base* basePtr = new Son();
Test1(*basePtr);
Test2(*basePtr);
}//输出结果 如下
Base Test
Son Test