程序运行出错
#include<iostream.h>
#include<string.h>
class name
{
char *neirong;
int g;
public:
void nei()
{
this->g=strlen(this->neirong);
neirong=new char[g+1];
}
void shuru()
{
cin>>neirong;
cout<<endl;
}
//name(name & h);
friend name operator + (name &x,name &m);
void display()
{
cout<<"您的姓名是:"<<neirong;
}
void s()
{
}
};
name operator + (name &x,name &m)
{
name temp;
temp.g=x.g+m.g;
temp.neirong=new char[temp.g+1];
strcpy(temp.neirong,x.neirong);
strcat(temp.neirong,m.neirong);
return(temp);
}
void main()
{
name x;
name m;
name xm;
cout<<"请输入姓:";
x.shuru();
cout<<"请输入名:";
m.shuru();
x.nei();
m.nei();
xm=x+m;
xm.display();
}
让用户输入姓和名,然后将姓名显示在屏幕上
我想输入完姓和名在开内存,然后将两个对象中的字符串加在一起。编译没问题,运行时当输入姓后一回车出错。
问题点数:30、回复次数:8Top
1 楼yjm0105(流云)回复于 2006-03-19 09:14:44 得分 3
char *s;//没有为它申请空间之前是不能接受输入的
cin>>s;//ERRORTop
2 楼ugg(逸学堂(exuetang.net))回复于 2006-03-19 09:59:37 得分 5
char *neirong;
int g;
lz 用string变量代替char *neirong;
string neirong;
这样开辟内存都有string类来做,非常简单。
Top
3 楼yleiou(单刀匹马)回复于 2006-03-19 10:12:36 得分 3
return(temp); 也有错 返回的是局部变量Top
4 楼aniude(重返荣耀)回复于 2006-03-19 11:20:16 得分 5
#include<iostream>
#include<string.h>
using namespace std;
class name
{
char *neirong;
int g;
public:
void nei()
{
g=strlen(neirong);
//neirong=new char[g+1];
}
void shuru()
{
char *tmp=new char[100];
cin>>tmp;
if(tmp!=NULL){
neirong=new char[strlen(tmp)+1];
strcpy(neirong,tmp);
}
cout<<endl;
}
//name(name & h);
friend name operator + (name &x,name &m);
void display()
{
cout<<"您的姓名是:"<<neirong;
}
void s()
{
}
};
name operator + (name &x,name &m)
{
name temp;
temp.g=x.g+m.g;
temp.neirong=new char[temp.g+1];
strcpy(temp.neirong,x.neirong);
strcat(temp.neirong,m.neirong);
return temp;
}
void main()
{
name x;
name m;
name xm;
cout<<"请输入姓:";
x.shuru();
cout<<"请输入名:";
m.shuru();
x.nei();
m.nei();
xm=x+m;
xm.display();
}
-----
改了下,能执行了Top
5 楼yuchen2006(雨晨)回复于 2006-03-21 15:43:18 得分 0
还有个程序
#include<iostream.h>
#include<string.h>
class A
{
char *p;
int g;
public:
A(char *pp)
{
g=strlen(pp);
p=new char[g+1];
*p=*pp;
}
~A()
{
delete p;
}
};
class B
{
char *x;
int gg;
public:
B()
{
gg=0;
x=new char;
}
B(char*xx)
{
gg=strlen(xx);
x=new char[gg+1];
*x=*xx;
}
~B()
{delete x;}
};
void main()
{
A a("患难时的朋友");
B b("是真正的朋友!");
B c;
c=a+b;
}
问题:不同类的对象相加如何实现??c=a+b c和b都是B类的,a是A类的,应该怎么做才能让结果等于 “患难时的朋友是真正的朋友”Top
6 楼jixingzhong(瞌睡虫·星辰)回复于 2006-03-21 17:17:25 得分 3
重载 + 操作 ....Top
7 楼yuchen2006(雨晨)回复于 2006-03-22 18:14:30 得分 0
#include<iostream.h>
#include<string.h>
class B;
class A
{
char *p;
int g;
public:
A()
{
p=new char;
g=0;
}
A(char *pp)
{
g=strlen(pp);
p=new char[g+1];
*p=*pp;
}
~A()
{
delete p;
}
friend A operator + (B &b,A &a);
};
class B
{
char *x;
int gg;
public:
B()
{
gg=0;
x=new char;
}
B(char*xx)
{
gg=strlen(xx);
x=new char[gg+1];
*x=*xx;
}
~B()
{delete x;}
friend A operator + (B &b,A &a);
};
A operator +(B &b,A &a)
{
A duixiang;
duixiang.g=b.gg+a.g;
duixiang.p=new char[duixiang.g+1];
strcpy(duixiang.p,a.p);
strcat(duixiang.p,b.x);
return(duixiang);
}
void main()
{
A a("患难时的朋友");
B b("是真正的朋友!");
B c;
c=a+b;
}
有个错误,error C2678: binary '+' : no operator defined which takes a left-hand operand of type 'class A' (or there is no acceptable conversion)
什么意思??Top
8 楼benlei999(醉明月)回复于 2006-03-22 20:56:25 得分 11
你调用+重载函数的参数不对
friend A operator + (B &b,A &a);
c=a+b;//a 是A,而b 是B,反了。
**************
还有很多错,比如没有拷贝构造函数,没有赋值函数,构造函数不好用啊...总之有点乱哈。我改了一下,写得不是很规整哈!
*****************************************
#include "stdafx.h"
#include<iostream.h>
#include<string.h>
class B;
class A
{
public:
char *p;
int g;
public:
A()
{
p=new char;
g=0;
}
A(int n)
{
p=new char[n];
g=n-1;
}
A(char *pp)
{
g=strlen(pp);
p=new char[g+1];
strcpy(p,pp);
*p=*pp;
}
A(A &a)
{
p=new char[a.g+1];
strcpy(p,a.p);
}
void operator =(A &b)
{
strcpy(p,b.p);
}
~A()
{
delete [] p;
}
friend A operator + (B &b,A &a);
};
class B
{
char *x;
int gg;
public:
B()
{
gg=0;
x=new char;
}
B(char *xx)
{
gg=strlen(xx);
x=new char[gg+1];
strcpy(x,xx);
}
~B()
{delete x;}
friend A operator + (B &b,A &a);
};
A operator +(B &b,A &a)
{
A duixiang(b.gg+a.g+1);
strcpy(duixiang.p,a.p);
strcat(duixiang.p,b.x);
return(duixiang);
}
void main()
{
A a("患难时的朋友");
B b("是真正的朋友!");
A c(50);
c=b+a;
cout<<c.p<<endl;
}
Top




