结构体重载运算符的疑惑
#include
#include
#include
#include
using namespace std;
const int N = 1005;
struct bign
{
int len,s[N];
bign() { memset(s,0,sizeof(s)); len=1; }
bign(int num) { *this=num; }
bign(char *num) { *this=num; }
bign operator =(int num)
{
char c[N];
sprintf(c,"%d",num);
*this=c;
return *this;
}
bign operator =(const char *num)
{
len=strlen(num);
for (int i=0;i1&&!s[len-1]) len--;
}
bign operator +(const bign &b)
{
bign c;
c.len=0;
for (int i=0,g=0;g||i=0) g=0;
else{
x+=10;
g=1;
};
c.s[c.len++]=x;
}
c.clean();
return c;
}
bign operator *(const bign &b)
{
bign c;
c.len=len+b.len;
for (int i=0;i=0;i--)
if (s[i]!=b.s[i]) return s[i]>(istream &in,bign &x)
{
string s;
in>>s;
x=s.c_str();
return in;
}
ostream& operator <<(ostream &out,bign &x)
{
out<>a>>b;
// cout<
中的
bign(int num) { *this=num; }
bign(char *num) { *this=num; }
作用是什么?
如果删去这两条语句编译仍能正常通过但
bign n=123;
会编译错误,但
bign n;
n=123;
能正常编译
结构体的初始化不应该是bign n(123);
小白试了试发现结果无差别,这是什么原理?
望大神相助
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
调用的是拷贝构造函数:
你注释到之后当然会出错,而
先调用默认构造函数,然后调用赋值运算符,所以注释掉两个函数后没有错。
你可以自己debug一下。