公有继承:
当类的继承方式为公有继承时,基类的公有成员和保护成员的访问属性在派生类中不变,而基类的私有成员不可直接访问。也就是说基类的公有成员和保护成员被集成到派生类中访问属性不变,仍作为派生类的公有成员和保护成员,派生类的其他成员可以直接访问他们。在类族之外只能通过派生类的对象访问从基类继承的公有成员,而无论是派生类的成员还是派生类的对象都无法直接访问基类的私有成员。
代码说明:
#include<iostream>
#include<cassert>
using namespace std;
class point
{
public:
void initpoint(float x=0,float y=0)
{
this->x=x;
this->y=y;
}
void move(float offx,float offy) {x+=offx;y+=offy;}
float getx() const {return x;}
float gety() const {return y;}
private:
float x,y;
};
class rectangle:public point{//派生类定义部分
public:
void initrectangle(float x,float y,float w,float h)
{
initpoint(x,y);//调用基类的公有成员函数
this->w=w;
this->h=h;
}
float geth() const {return h;}
float getw() const {return w;}
private://新增私有数据成员
float w,h;
};
int main()
{
rectangle rect;//定义rectangle类的对象
rect.initrectangle(2,3,20,10);//设置矩形的数据
rect.move(3,2);//移动矩形位置,在类外通过派生类的对象访问从基类继承的公有成员
cout<<"the data of rect(x,y,w,h):"<<endl;
cout<<rect.getx()<<","<<rect.gety()<<","<<rect.getw()<<","<<rect.geth()<<endl;//输出特征参数
return 0;
}