c++中类对象的赋值问题

来源:百度知道 编辑:UC知道 时间:2024/06/24 05:18:37
//stock.h
#ifndef STOCK_H
#define STOCK_H

class Stock
{
private:
char *co_name; //公司名称
double total_val;//股值
public:
Stock(void); //默认构造函数
Stock(const char *co,double tv);
~Stock(){};
void show() const; //输出公司股票信息
const Stock& topval(const Stock &s) const;//比较两种股票的股值,返回股值大的股票公司
};
#endif

以下是一种正确的主程序,
int main()
{
Stock a("Music",234565);
Stock b("Sport",213456);
a.show();
b.show();
Stock p=a.topval(b);
cout<<"以下输出股值大的公司股票信息:"<<endl;
p.show();
return 0;
}

以下是一种错误的主程序
int main()
{
Stock p;
Stock a("Music",234565);
Stock b("Sport",213456);
a.show();
b.show();
p=a.topval(b);
cout<<"以下输出股值大的公司股票信息:"<<endl;
p.show();

1.是可以直接将类的对象进行赋值的啊

2.估计是你的默认构造函数只有声明没有定义吧

C++能直接对象赋值,但是你用了char *,就要注意内存的回收问题了。。简单说来,直接对象赋值,char*指向的赋值过后便没有任何指针指向原来的对象了

当数据成员是指针的时候,对象之间的赋值一定要注意深拷贝和浅拷贝的问题,你这个程序很可能是在这个问题上出错了。
举个例子如果你这程序中有构造函数,也有拷贝构造函数(不管是深拷贝还是浅拷贝):
Stock a("Music",234565);
Stock b("Sport",213456);
Stock p = a; //或者Stock p(a); 和 Stock p; p = a; 是不相同的。
Stock p = a; 生成对象时调用拷贝构造函数。因为存在指针成员所以,应当写一个深拷贝,即p的数据成员co_name应当重新分贝内存。
Stock p; p = a;生成对象p调用的是构造函数,对象之间的赋值是一一赋值,这样p对象的co_name指针指向了a的co_name,而没有重新分配内存。

最好把代码全贴上~