喜欢的朋友可以关注收藏一下: http://blog.csdn.NET/qq_31201973
本文实现了一个Shape类型并且派生出Rectangle类和Circle类,本文和上周有相似的地方也有不同,原版要求如下:
为下面的 Rectangle 和 Circle 类重写 getArea 虚函数。然后创建一个数组。 使用一个循环,生成 10 个 Rectangle、10 个 Circle,根据循环遍历顺序为它 们设置 no 编号,位置、长、宽、半径等其他信息取随机 1~10 之间的整数值, 然后将它们加入到创建好的数组中。最后,将这个长度为 20 的数组中所有面 积小于 50 的形状删除。将剩下的形状组成一个新的数组返回。
注意: 1. 补齐任务所需的其他函数。2. 考虑正确的内存管理。3. 使用原生数 组,不使用 vector 等容器。
class Shape
{
int no;
public:
virtual int getArea()=0;
};
class Point
{
int x;
int y;
};
class Rectangle: public Shape
{
int width;
int height;
Point leftUp;
};
class Circle: public Shape
{
Point center;
int radius;
};
先谈几个细节:
一、class和struct
在c++里class和struct功能很类似,但是我们一般用struct只用c语言延续的功能。
class默认是private,struct默认是public.
二、三种继承的背后
众所周知:
三种访问权限
public:可以被任意实体访问
protected:只允许子类及本类的成员函数访问
private:只允许本类的成员函数访问
三种继承方式
public 继承
protect 继承
private 继承
组合结果
基类中 继承方式 子类中
public & public继承 => public
public & protected继承 => protected
public & private继承 = > private
protected & public继承 => protected
protected & protected继承 => protected
protected & private继承 = > private
private & public继承 => 子类无权访问
private & protected继承 => 子类无权访问
private & private继承 = > 子类无权访问
而关键就在这里,基类private被子类继承是无法访问,而不是无法继承。我用运算符sizeof()运算符算了一下大小发现它是可以继承的只不过无法访问。这样除了public、private、protected还有一种隐藏的无法访问,而无法访问的成员是可以通过