/****************************************************************
一个人(属性:姓名、年龄、性别)
学生(属性:人、成绩)
老师(属性:人、工龄)
在职教师研究生(属性:人、学生、老师、津贴)
*****************************************************************/
#include<iostream>
#include<string>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
class Rational
{
private:
int a,b;
public:
Rational(){a=0;b=0;}
Rational(int a1,int b1):a(a1),b(b1){}
~Rational(){}//{cout<<"destructor"<<endl;}
Rational operator+(Rational &num)
{
Rational n;
n.b=b*num.b;
n.a=a*num.b+num.a*b;
return n;
}
Rational operator*(Rational &num)
{
Rational n;
n.b=b*num.b;
n.a=a*num.a;
return n;
}
bool operator==(Rational &num)
{
Rational n,m;
n.b=b*num.b;
n.a=a*num.b;
num.a=b*num.a;
if(n.a==num.a)return true;
else return false;
}
string value()
{
char s1[15],s2[15];
//string s1,s2;
itoa(a,s1,10);
itoa(b,s2,10);
strcat(s1,"/");
strcat(s1,s2);
return s1;// 把a/b以分数形式作为字符串返回
}
};
int main()
{
Rational num1(1,3),num2(3,1),num3(2,6),result;
result=num1+num2;
//cout<<num1.value();
//printf("%s",num1.value());
printf("%s+%s = %s\n",num1.value(),num2.value(),result.value());
printf("%s*%s = %s\n",num1.value(),num2.value(),result.value());
printf("%s is %s equal to %s.\n",num1.value(),(num1==num2)?"":"not",num2.value());
printf("%s is %s equal to %s.\n",num1.value(),(num1==num3)?"":"not",num3.value());
return 0;
}
OOT练习.exe 中的 0x745ed0ac 处最可能的异常: 0xC0000005: 读取位置 0x00332f31 时发生访问冲突
1、给一个数组分配了比较小的内存空间,然后又给该数组赋了一个比较大的值,举例说明:charbuf[10];buf=C++读取位置0x******时发生访问冲突的可能原因C++读取位置0x******时发生访问冲突的可能原因;这样才访问buf的时候,就会出现错误解决方法:给数组分配更大一些的内存空间,如charbuf[1000];
2、句柄或指针在使用前被释放解决方法:检查代码配合调试,揪出野指针分析:内存冲突问题经常发生于用malloc等进行内存分配后指针的使用。C和C++中的指针,其优势很明显,灵活,方便,使用起来简单;劣势当然也很明显,就是容易导致系统崩溃,指针操作不当,或没有及时释放,或没有判断指针是否越界,或没有及时置空,这些都很容易导致系统崩溃,所以使用指针一定要考虑严谨。
string是类,printf()只能打印基本类型,因此显示格式化失败。
你可以转换一下再显示(当然,这个并不是推荐的方法,应该使用标准类型):
printf("%s+%s = %s\n",num1.value().c_str(),num2.value().c_str(),result.value().c_str());本回答被网友采纳c++指针比较乱,有这个可能的说