C++开发中级
1023 浏览 5 years, 10 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方法数据
如果默认参数不同,子类函数还是会重写父类的函数,但是会使用父类的默认参数。这是静态和动态的问题。