看板Programming
标 题Re: 关於c++的继承
发信站KKCITY (Mon Jun 18 10:21:49 2007)
转信站ptt!ctu-reader!ctu-peer!news.nctu!netnews.chu!Leo.mi.chu!zoonews.ee.nt
※ 引述《[email protected] (ha(ruhi|yate)ism)》之铭言:
> ※ 引述《[email protected] ( )》之铭言:
> : 请教一下
> : c++的继承可以写public/preotected/private
> : 我的意思是class可以写
> : class Hobbit:public people
> : class Hobbit:protected people
> : class Hobbit:private people
> : 而这些不同的继承方式究竟会有什麽差别呢?
> : 我有博硕的书 可是书本内没有解释这个
> : 所以在此请教
> : 谢谢
> 换一本书吧 这种东西是应该要解释的 (不然就是你没看到)
> 它们的差别大致如下
> class base
> {
> public:
> int base_pub;
> private:
> int base_priv;
> protected:
> int base_prot;
> };
> class pubDer: public base
> {
> void f()
> {
> base_pub=0; //OK, 它还是public
> base_priv=0; //error, 因为它是private
> base_prot=0; //OK, 它还是protected
> }
> };
> class privDer: private base
> {
> void f()
> {
> base_pub=0; //OK, 但它变成private
> base_priv=0; //error
> base_prot=0; //OK, 它也变成private
> }
> };
> class privDer2: public privDer
> {
> void g()
> {
> base_pub=0; //error, 因为在privDer中它是private
> base_prot=0; //error, 同上
> }
> };
> class protDer: protected base
> {
> void f()
> {
> base_pub=0; //OK, 但它变成protected
> base_priv=0; //error
> base_prot=0; //OK, 它还是protected
> }
> };
> class protDer2: public protDer
> {
> void g()
> {
> base_pub=0; //OK, 因为在protDer中它是protected
> base_prot=0; //OK, 同上
> }
> };
> int main(void)
> {
> pubDer pubd;
> privDer privd;
> protDer protd;
> pubd.base_pub=0; //OK, 因为它是public
> privd.base_pub=0; //error, 因为它是private
> protd.base_pub=0; //error, 因为它是protected
> return 0;
> }
谢谢
等一下我会试试看你提供的程式码
了解一下他到底怎麽跑
不过我先附上我写的
我想了解是哪里错了
谢谢
请问以下的protected继承为何会有错误呢
#include <iostream>
using namespace std;
class people
{
protected:
public:
void display(int);
void show();
int height;
};
void people::display(int xyz ){
height=xyz;
cout<<"高"<<height<<endl;
}
void people::show( ){
height=100;
cout<<"高"<<height<<endl;
}
class Hobbit:protected people
{
private:
int id;
public:
void show();
} ;
void Hobbit::show()
{
display(110);
id=1;
cout<<"id为"<<id<<endl;
}
int main()
{
people a;
Hobbit b;
cout <<"a\n";
a.display(160);
cout <<"\nb\n";
b.display(110); //这一行会有错误
b.show();
system("PAUSE");
return 0;
}
--
┌─────◆KKCITY◆─────┐▇─┐KKADSL→六星级优质连线服务
│ bbs.kkcity.com.tw │┴ └─▇ 马上申请带你上网环游全世界!
└──《From:140.109.140.11
》──┘ KKADSL ┴ http://adsl.kkcity.com.tw
--
1F:→ meanwhy:上面范例不是有说了 你用protected继承 140.112.76.135 06/18 19:15