c++高手请帮我改改这个程序,谢谢啦

来源:百度知道 编辑:UC知道 时间:2024/06/04 17:10:48
// Note:Your choice is C++ IDE
#include <iostream>
using namespace std;
#define N 10
class a
{public:
char &operator [](int i);
a(char s[N]);
void print();
private:
char *p;
};
char a:: &operator [](int i)
{return *(p+i);}
void a::print()
{cout<<p;}
a::a(char s[N])
{p=s;
}
int main()
{a q("kai");
int i;
for(i=0;i<3;i++)
q[i]=q[i]+32;
q.print();

return 0;
}

重载函数的定义写错了,应该是
char& a::operator [](int i)

另外,你的拷贝函数写错了,直接p=s是不行的,比如这个程序中,你用的"kai"是常量,直接p=s的话,p指向常量字符串,而常量字符串是不允许修改的,所以你的q[i]=q[i]+32的操作会出错.

还有,小写字母减32才是大写字母.

正确程序如下:
#include <iostream>
using namespace std;
#define N 10
class a
{public:
char &operator [](int i);
a(){p=NULL;}
a(char s[N]);
~a(){if(p) delete p;}
void print();
private:
char *p;
};
char& a::operator [](int i)
{return *(p+i);}
void a::print()
{cout<<p;}
a::a(char s[N])
{
int len=strlen(s);
p=new char[len+1];
strcpy(p,s);
}
int main()
{a q("kai");
int i;
for(i=0;i<3;i++)
q[i]=q[i]-32;
q.print();

return 0;
}

手机看不见嘞

#include <iostream>
using namespace std;
#define N 10
class a
{public:
char &operator [](int i);
a