分析两段code..
//====================================================
#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)
有谁分析一下区别。