C++开发中级


869 浏览 5 years, 4 months

1 继承

版权声明: 转载请注明出处 http://www.codingsoho.com/
class Shape
{
public:
    display();
}

class Circle:public  Shape
{
public:
    display();
}

class Sphere:public Circle
{
public:
    display();
}

Shape sh;
Circle c;
Sphere sp;

sh.display();
c.display(); //调用 Circle ::display()
c.Shape::display(); //如果想调用子类Shape的函数
sp.display() //调用 Sphere::display()
Shape *shptr = New Circle();
shptr->display(); //调用 Shape::display()

如何想实例化子类的display函数怎么做?
将display函数改为虚函数

class Shape
{
public:
    virtual display();
}

子类如果函数名,参数及返回值想等,则默认也为虚函数
C++11之后要加上关键字override

Shape *shptr = New Circle();
shptr->display(); //调用 Shape::display() // display不是虚函数
shptr->display(); //调用 Circle::display()  // display是虚函数
Shape &shptr = Circle();
shptr.display(); //调用 Shape::display() // display不是虚函数
shptr.display(); //调用 Circle::display()  // display是虚函数

几种继承方式

  • 单继承 Super -> Sub
  • 多层继承 Super -> Sub -> SubSub
  • 多继承 Super -> Sub1 Super -> Sub2
  • 多重继承 Super1 -> Sub Super2 -> Sub

不能用Super指针调用Sub类的方法。
子类不能访问父类的private方法数据

如果默认参数不同,子类函数还是会重写父类的函数,但是会使用父类的默认参数。这是静态和动态的问题。