问题一: 
// 父类
 class
 {
   public:
          void print() { printf("\nMy name is Parent!"); };
 };
 //派生类
  
  class NewClass:public Parent
 {
   public:
          void print() { printf("\nMy name is NewClass!"); };   
 }
  
  main()
 {
    Parent p;
    NewClass nc;
    p.print ();
    //此处输出: My name is Parent!
    nc.print();
    //此处输出: My name is NewClass!
 }
  书上说由于NewClass 重载了父类Parent的成员函数print。
  提问:重载在c++中不是用参数的个数和类型来区别的吗,这里叫做重载正确吗?
那么覆盖又是什么概念呢? 多态呢?区别在什么地方啊?

解决方案 »

  1.   

    假设virtual将函数设置为虚函数才体现多态性,重载指如果nc类不重新定义这个函数,nc.print()将会输出My name is Parent!
    如果定义这个函数为虚,parent p = new newclass后,p.print()将会输出实际的函数(nc类的print(),输出My name is NewClass!体现了多态性.
      

  2.   

    实际上这既不是重载,也不是覆盖。而应该是隐藏。类似于局部变量隐藏了同名的全局变量,但让可以用::符访问到。同样在派生类newclass中通过Parent::print()也可以访问到父类的同名函数。
      

  3.   

    同返回类型同名同参数用virtual吧,老兄,这样做会将父类函数隐藏,同意 ruihuahan(飞不起来的笨鸟)
      

  4.   

    不好的设计看看nonvirtual && virtual的语意
      

  5.   

    I agree with  ruihuahan(飞不起来的笨鸟)