急!!高分!!C++问题。。。

来源:百度知道 编辑:UC知道 时间:2024/09/22 04:16:08
#include<iostream.h>
class Fun{
int *a,*b;
public:
Fun(int i=1,int j=1);
int sum();
void print();
};
Fun::Fun(int i,int j){
a=&i;
b=&j;
}
int Fun::sum(){
return *a+*b;
}
void Fun::print(){
cout<<"The Sum is:";
}
int main(){
Fun f1(5,6);
f1.print();
cout<<f1.sum()<<endl;
return 0;
}
这个程序求两数之和,必须用指针变量。。。怎么改??
这段代码是要求两数之和的,而且确实有错误。。。

代码没问题是假的 而且问题还不小
首先你创建了一个Fun类型的对象f1然后对它进行初始化 这时候需要调用构造函数;
而Fun::Fun(int i,int j){
a=&i;
b=&j;
}的实际情况是:在函数范围了定义了两个变量i,j并分别赋予值5,6 这样使得a,b能指向i,j 然后构造函数结束 i,j生命周期结束被销毁 a,b被释放成为野指针指向随机内存 后面的SUM自然就出问题了。
你可以这样写:
#include<iostream>

using std::cout;
using std::endl;

int sum(const int *a, const int *b){
return *a+*b;
}

int main(){
const int i = 5;
const int j = 6;
const int *a = &i;
const int *b = &j;
cout << sum(a, b) << endl;
return 0;
}
如果一定要用类写的话 类的设计最好规范点 不要杂乱
#include<iostream>
using std::cout;
using std::endl;

class Fun
{
public:
Fun(int *ii = NULL, int *jj = NULL);
int sum();
void print();
private:
int *i, *j;
};

Fun::Fun(int *ii, int *jj){
i=ii;
j=jj;
}

int Fun::sum(){
return *i+*j;
}

void F