关于delete出错
原本想写个代码试试操作符重载可不可以的,结果除了问题 不知道错在哪里了
#include <iostream>
#include <cstring>
using namespace std;
class Port
{
private:
char *s;
public:
Port();
Port(const char *a);
Port(const Port &a);
virtual ~Port();
Port &operator =(const Port &a);
friend ostream &operator <<(ostream &os, const Port &a);
};
class VinPort:public Port
{
private:
char *p;
public:
VinPort();
VinPort(const char *a, const char *b);
VinPort(const VinPort &a);
virtual ~VinPort();
VinPort &operator =(const VinPort &a);
friend ostream &operator <<(ostream &os, const VinPort &a);
};
Port::Port()
{
s = NULL;
}
Port::Port(const char *a)
{
s = new char[strlen(a)];
strcpy(s, a);
}
Port::Port(const Port &a)
{
s = new char[strlen(a.s)];
strcpy(s, a.s);
}
Port::~Port()
{
delete []s;
}
Port &Port::operator =(const Port &a)
{
if (this == &a)
return *this;
delete []s;
s = new char[strlen(a.s)];
strcpy(s, a.s);
return *this;
}
ostream &operator <<(ostream &os, const Port &a)
{
if (a.s)
os << a.s << endl;
else
os << "NULL" << endl;
return os;
}
VinPort::VinPort():Port()
{
p = NULL;
}
VinPort::VinPort(const char *a, const char *b):Port(a)
{
p = new char[strlen(b)];
strcpy(p, b);
}
VinPort::VinPort(const VinPort &a):Port(a)
{
p = new char[strlen(a.p)];
strcpy(p, a.p);
}
VinPort::~VinPort()
{
delete []p;
}
VinPort &VinPort::operator =(const VinPort &a)
{
if (this == &a)
return *this;
Port::operator =(a);
delete []p;
p = new char[strlen(a.p)];
strcpy(p, a.p);
return *this;
}
ostream &operator <<(ostream &os, const VinPort &a)
{
os << a;
if (a.p)
os << " " << a.p;
else
os << " NULL";
return os;
}
int main()
{
Port a("Hello");
Port b;
Port c("World");
cout << a << b << c;
b = a;
c = b;
cout << a << b << c;
VinPort aa("test", "test2");
VinPort bb("aaaa", "bbbb");
VinPort cc;
cout << aa << bb << cc;
cc = aa;
cout << cc;
return 0;
}
[解决办法]