面向对象上机,函数参数里面最常用到的应该就是字符串了,但是一直都没有搞清楚具体有哪些使用形式,怎么用,对使用时所会发生的错误有哪些解决办法?于是乎在今天做个总结,方便自己日后回顾。
Ⅰ.字符指针
1.常见错误与处理方法
(1)E0167 “const char *” 类型的实参与 “char *” 类型的形参不兼容
比如下面这段代码
/*定义student类,包含姓名,学号,分数,三个数据成员;有三个成员函数:设置学生信息,显示学生信息,
比较两个学生信息是否完全相同(可以使用一个对象,或一个对象指针,或一个对象对象引用,作为形参);
为student类编写常规构造和拷贝构造函数;编写析构函数。主程序中创建两个学生对象,一个常规构造,
一个拷贝构造;然后分别设置两个学生信息,再比较两个学生信息是否相同并输出结果。*/
#include<iostream>
using namespace std;
class student
{
private:
char *name;
long int num;
int score;
public:
student(char *Name=NULL ,long int Num=0 ,int Score =0 ) //带默认形参的构造函数
{
name=Name;
num=Num;
score=Score;
cout<<"构造成功!"<<endl;
}
~student() //析构函数
{
cout<<"析构成功!"<<endl;
}
student(student *p) //拷贝构造函数
{
name=p->name;
num=p->num;
score=p->score;
cout<<"拷贝构造成功!"<<endl;
}
void write(char *Name,long int Num,int Score) //设置学生信息
{
name=Name;
num=Num;
score=Score;
cout<<"设置学生信息成功!"<<endl;
}
void showinfo() //显示学生信息
{
cout<<name<<" "<<num<<" "<<score<<endl;
}
void compare(student a, student b) //比较学生信息是否相同
{
if(a.num==b.num)
cout<<"学号相同"<<endl;
else cout<<"学号不相同"<<endl;
if(a.score==b.score)
cout<<"分数相同"<<endl;
else cout<<"分数不相同"<<endl;
if(strcmp(a.name,b.name)==0)
cout<<"姓名相同"<<endl;
else cout<<"姓名不相同"<<endl;
}
};
int main(){
student mate1("汪",01,100),mate2("徐",02,101);//构造两个student类对象
mate1.write("大佬A",01,100);
mate2.write("大佬B",02,100);
mate1.showinfo();
mate2.showinfo();
mate1.compare(mate1,mate2);
system("pause");
}
在student类中,使用了char *name来作为构造函数和write的形参,于是乎会发生E0167错误,按照其所说,我们将构造函数和write 的char *name 改为const char *name ,这时候会有第二个错误:
(2)E0513 不能将 “const char *” 类型的值分配到 “char *” 类型的实体
按照其所说,我们再将数据成员的char *name也改为const char *name,这时候可以运行
#include<iostream>
using namespace std;
class student
{
private:
const char *name;
long int num;
int score;
public:
student(const char *Name=NULL ,long int Num=0 ,int Score =0 ) //带默认形参的构造函数
{
name=Name;
num=Num;
score=Score;
cout<<"构造成功!"<<endl;
}
~student() //析构函数
{
cout<<"析构成功!"<<endl;
}
student(student *p) //拷贝构造函数
{
name=p->name;
num=p->num;
score=p->score;
cout<<"拷贝构造成功!"<<endl;
}
void write(const char *Name,long int Num,int Score) //设置学生信息
{
name=Name;
num=Num;
score=Score;
cout<<"设置学生信息成功!"<<endl;
}
void showinfo() //显示学生信息
{
cout<<name<<" "<<num<<" "<<score<<endl;
}
void compare(student a, student b) //比较学生信息是否相同
{
if(a.num==b.num)
cout<<"学号相同"<<endl;
else cout<<"学号不相同"<<endl;
if