分析两段code..

acange 2001-07-19 05:29:49
//====================================================
#include <iostream.h>
class base {
int i;
public:
base(int I=0):i(I){}
virtual int sum() const {return i;}
};

class derived:public base {
int j;
public:
derived(int I=0, int J=0):base(I), j(J){}
int sum() const {return base::sum() +j;}
};

void call (base b){
cout << "sum = "<<b.sum()<<endl;
}

main(){
base b(10);
derived d(10,47);
call(b);
call(d);
}
//************
// result: sum=10
// sum=10
//===============================================================

#include <iostream.h>

class base {
int i;
public:
base(int I=0):i(I){}
virtual int sum() const {return i;}
};

class derived:public base {
int j;
public:
derived(int I=0, int J=0):base(I), j(J){}
int sum() const {return base::sum() +j;}
};

void call (base& b){
cout << "sum = "<<b.sum()<<endl;
}

main(){
base b(10);
derived d(10,47);
call(b);
call(d);
}

//*********
//result: sum=10
// sum=57
/////////////////////////////////////////////////

唯一不同的地方是:第一段用: void call (base b)
第二段用: void call (base& b)

有谁分析一下区别。
...全文
51 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jamesye78 2001-07-19
  • 打赏
  • 举报
回复
同意楼上
第一个call(base b)拷贝传入的是一个类对象;
第二个call(base&b)传入的是一个类对象的地址;
shinesun 2001-07-19
  • 打赏
  • 举报
回复
我试了一下,void call(base b)传到函数的参数是传的base类的地址,
void call(base& b)传到函数的参数是对象的地址。
实际参数定义可以这样写。
base *d=new derived(10,47);
shinesun 2001-07-19
  • 打赏
  • 举报
回复
第一个是类的对象。
第二个是类的引用,引用的好去是可以改变对象的值,因为他们指的同一内存地址。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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