私有继承,公有继承,保护继承(代码附上自己体会)

来源:互联网 发布:淘宝汽车服务指定安装 编辑:程序博客网 时间:2024/05/17 03:46

公有继承

×/


# include <iostream>

# include <stdlib.h>
using namespace std;
class bass{
int x, y;
protected:
int a, b;
public:
int m, n;
void setx(int x){
this->x = x;
}
void sety(int y){
this->y = y;
}
int  getx(){
return x;
}
int  gety(){
return y;
}
};
class derived :public bass{
public:
void setxy(int x, int y){
setx(x);
sety(y);
};
void setab(int a, int b){
this->a = a;
this->b = b;
}
void setmn(int m, int n){
this->m = m;
this->n = n;
}
int getsumxy()
{
return getx() + gety();
}
int getsumab(){
return a + b;
}
int getsummn(){
return m + n;
}
};
int main()
{
derived obj;
obj.setxy(1, 2);
obj.setab(10, 20);
obj.setmn(100, 200);
//cout << obj.x + obj.y << endl;
//cout << obj.a + obj.b << endl;
cout << obj.m + obj.n << endl;
getchar();
return 0;

}


//私有继承

# include <iostream>
using namespace std;
class bass{
int x, y;
protected:
int a, b;
public :
int m, n;
void setx(int x){ this->x = x;
};
void sety(int y){ this->y = y;
};
int getx(){
return x;
}
int gety(){
return y;
}
};
class dervied :private bass{
public:
void setxy(int x, int y){
setx(x);
sety(y);
}
void setab(int a, int b){
this->a = a;
this->b = b;
}
void setmn(int m, int n){
this->m = m;
this->n = n;
}
int getsumxy(){
return getx() + gety();
}
int getsumab(){
return a + b;
}
int getsummn(){
return m + n;
}
};
int main()
{
dervied obj;
obj.setxy(1, 2);
obj.setab(10, 10);
obj.setmn(100, 200);
//cout << "x+y=" << obj.x + obj.y << endl;   错误请查看私有继承
//cout << "a+b=" << obj.a + obj.b << endl;   错误请查看私有继承
//cout << "m+n=" << obj.m + obj.n << endl;   错误请查看私有继承
cout << "x+y=" << obj.getsumxy() << endl;
cout << "a+b=" << obj.getsumab() << endl;
cout << "m+n=" << obj.getsummn() << endl;
getchar();
return 0;
}




//保护继承(个人感觉是最有用的继承方式所以着重描述了这种继承方式)


#  include <iostream>
using  namespace std;
class bass{
private:
int x, y;
protected:
int a, b;
public :
int m, n;
void setx(int x){ this->x = x; }
void sety(int y){ this->y = y; }
int getx(){ return x; }
int gety(){ return y; }
};
class extbass :protected bass{};
class dervised:protected extbass{
public:
void setxy(int x, int y){ setx(x); sety(y); }           //继承类中间的公有成员调用基类中间继承过来的保护成员
void setab(int a, int b){ this->a = a; this->b = b; }
void setmn(int m, int n){ this->m = m; this->n = n; }
int getsumxy(){ return getx() + gety(); }          //继承类中间的公有成员调用基类中间继承过来的保护成员
int getsumab(){ return a + b; }
int getsummn(){ return m + n; }
};
int main()
{
dervised obj;
obj.setxy(1, 2);
obj.setab(10, 20);
obj.setmn(100, 200);
cout << "x+y=" << obj.getsumxy() << endl;
cout << "a+b=" << obj.getsumab() << endl;
cout << "m+n=" << obj.getsummn() << endl;
//cout << "x+y=" << obj.x + obj.y << endl;       原本基类中间私有保护的数据在三种继承方式中都是无法继承的;
//cout << "a+b=" << obj.a + obj.n << endl;       原本基类中的保护成员在保护继承的方式下依旧是保护成员无法直接访问保护成员;
//cout << "m+n=" << obj.m + obj.n << endl;       原本基类中间的共有成员在保护继承的方式下变成派生类中的保护成员无法直接访问;
return 0;
}


0 0
原创粉丝点击