访问基类的私有成员-探索更好的方法

raincross98 2008-04-23 05:56:19
修改程序,我是加了两个函数,想知道有没有更好的修改方法
修改前:
#include <iostream.h>
class base
{
private:
int n1;
protected:
int k1;
public:
base(){n1=0;k1=1;}
void fun1(){cout < <n1 < <k1 < <endl;}
};
class d1:public base
{
private:
int n2;
protected:
int k2;
public:
d1(){n2=10;k1=11;}
void fun2(){cout < <n1 < <k1 < <endl; cout < <n2 < <k2 < <endl;}//
};


class d2:public d1
{
private:
int n3;
protected:
int k3;
public:
d2(){n3=20;k3=21;}
void fun3(){cout < <n1 < <k1 < <endl;cout < <n2 < <k2 < <endl; cout < <n3 < <k3 < <endl;}
};
void main()
{
base baseobj;
d1 d1obj;
d2 d2obj;
baseobj.fun1();
d1obj.fun2();
d2obj.fun3();
}
修改后:
#include <iostream.h>
class base
{
private:
int n1;
protected:
int k1;
public:
base(){n1=0;k1=1;}
int get_n1(){return n1;}
void fun1(){cout < <"class base:" < <endl;
cout < <"n1=" < <n1 < <"," < <"k1=" < <k1 < <endl;}

};


class d1:public base
{
private:
int n2;
protected:
int k2;
public:
d1(){n2=10;k2=11;}
int get_n2(){return n2;}
void fun2(){cout < <"class d1:" < <endl;
cout < <"n1=" < <base::get_n1() < <"," < <"k1=" < <k1 < <endl;
cout < <"n2=" < <n2 < <"," < <"k2=" < <k2 < <endl;}

};


class d2:public d1
{
private:
int n3;
protected:
int k3;
public:
d2(){n3=20;k3=21;}
void fun3(){cout < <"class d2:" < <endl;
cout < <"n1=" < <base::get_n1() < <"," < <"k1=" < <k1 < <endl;
cout < <"n2=" < <d1::get_n2() < <"," < <"k2=" < <k2 < <endl;
cout < <"n3=" < <n3 < <"," < <"k3=" < <k3 < <endl;}
};
void main()
{
base baseobj;
d1 d1obj;
d2 d2obj;
baseobj.fun1();
d1obj.fun2();
d2obj.fun3();
}
...全文
114 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
raincross98 2008-04-24
  • 打赏
  • 举报
回复
找到好方法了,刚开始没想起来,直接在派生类中访问fun函数就可以了!结贴喽!
FortunateK 2008-04-23
  • 打赏
  • 举报
回复
print (const & base)
{
cout<< base.print<<endl;
}


然后在每个类里面写print函数;

或者
print (const & base,size_t size)
{
if (size == sizeof(base))
then cout<<"base"
else if....
}

不太肯定是否好用
FortunateK 2008-04-23
  • 打赏
  • 举报
回复
写一个函数,传入一个base类型,重载输出操作符

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧