初用STL,看看这是怎么回事??

share_feelings 2009-05-11 06:41:22
PolynomialElementType.h:(存放多项式中一项的系数和指数)
#ifndef POLYNOMIAL_ELEMENT_TYPE_CLASS
#define POLYNOMIAL_ELEMENT_TYPE_CLASS
class PolynomialElementType
{
public:
double coefficient;
int exponent;
public:
PolynomialElementType();
PolynomialElementType(double coeff,int exp);
PolynomialElementType(const PolynomialElementType& p);
~PolynomialElementType();
};
#endif


PolynomialElementType.cpp:
#include "PolynomialElementType.h"
PolynomialElementType::PolynomialElementType()
{
coefficient=0;
exponent=0;
}

PolynomialElementType::PolynomialElementType(double coeff,int exp)
{
coefficient=coeff;
exponent=exp;
}

PolynomialElementType::PolynomialElementType(const PolynomialElementType& p)
{
PolynomialElementType(p.coefficient,p.exponent);
}

PolynomialElementType::~PolynomialElementType()
{
}



多项式类Polynomial.h:
#ifndef POLYNOMIAL_H_
#define POLYNOMIAL_H_

#include <list>
#include <algorithm>
#include <iostream>
#include "../DataElement/PolynomialElementType.h"
class Polynomial
{
private:
std::list<PolynomialElementType> Link;
public:
Polynomial();
~Polynomial();
void insert_item(int coeff,int exp);
void print();
};

#endif /* POLYNOMIAL_H_ */

Polynomial.cpp:
#include <functional>
#include "Polynomial.h"

Polynomial::Polynomial()
{
}
Polynomial::~Polynomial()
{
}

void Polynomial::insert_item(int coeff,int exp)
{
Link.push_back(PolynomialElementType(coeff,exp));
}

void Polynomial::print()
{
std::list<PolynomialElementType>::iterator iter=Link.begin();
for(;iter!=Link.end();)
{
PolynomialElementType pet_temp=*iter;
std::cout<<pet_temp.coefficient<<"X^"<<pet_temp.exponent;
if(++iter!=Link.end())
std::cout<<"+";
}
std::cout<<std::endl;
}

测试是否能插入元素:
#include "Polynomial.h"

int main()
{
Polynomial pa;
Polynomial pb;

pa.insert_item(1,2);
pa.insert_item(2,1);
pb.insert_item(3,2);
pb.insert_item(3,3);

pa.print();
pb.print();
return 1;
}

结果是随机数:
4.85873e-270X^0+4.85873e-270X^0
4.85873e-270X^0+4.85873e-270X^0



这是怎么回事???
...全文
110 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ymll1 2009-05-11
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 share_feelings 的回复:]
的确,加了个*this就行了。

我提问之前也一直在想构造函数哪错了,但是没有看拷贝构造函数。
因为没有发现哪用了拷贝构造函数。

还请说一下用到了。是insert_item中的push_back要用到吗??


谢谢楼上的哥哥们。


return -1;有人说是把控制权返回给系统。

[/Quote]
你说的对,容器的push_back都是往容器里放副本,而不是引用,所以需要用到复制构造函数
share_feelings 2009-05-11
  • 打赏
  • 举报
回复
的确,加了个*this就行了。

我提问之前也一直在想构造函数哪错了,但是没有看拷贝构造函数。
因为没有发现哪用了拷贝构造函数。

还请说一下用到了。是insert_item中的push_back要用到吗??


谢谢楼上的哥哥们。


return -1;有人说是把控制权返回给系统。
ymll1 2009-05-11
  • 打赏
  • 举报
回复
PolynomialElementType::PolynomialElementType(const PolynomialElementType& p)
{
PolynomialElementType(p.coefficient,p.exponent);
}

这里,你调用PolynomialElementType(double,int)构建了一个临时的PolynomialElementType对象,
然后执行到右花括号的时候,这个临时对消就析构了,但是你想做的肯定是给*this赋值对不?
所以应该改成
PolynomialElementType::PolynomialElementType(const PolynomialElementType& p)
{
*this = PolynomialElementType(p.coefficient,p.exponent);
}
或者:
PolynomialElementType::PolynomialElementType
:coefficient(p.coefficient),exponent(p.exponent)(const PolynomialElementType& p)
{
}
建议多用初始化列表,这种内置类型成员可能没有问题,但是对于类类型成员,效率差别很大的说,具体原因自己见《primer4e》第13章复制控制
还有
(1)PolynomialElementType::PolynomialElementType(double coeff,int exp)
与void Polynomial::insert_item(int coeff,int exp) 参数类型不匹配
不过不是什么大问题
(2)PolynomialElementType 类不需要手动定义赋值构造函数和析构函数,对于你这个类来说,编译器自动合成的相应函数可以工作的很好
(3)所有函数体为空的函数,比如Polynomial::Polynomial(){},应该写到类定义里头,编译器自动视为内联,可以提高效率
(4)楼上很多兄弟说了,你为啥要返回1?

share_feelings 2009-05-11
  • 打赏
  • 举报
回复
4楼调试没????


没什么意思,要与不要没什么影响吧。。
really3353 2009-05-11
  • 打赏
  • 举报
回复
int main()
{
Polynomial pa;
Polynomial pb;

pa.insert_item(1,2);
pa.insert_item(2,1);
pb.insert_item(3,2);
pb.insert_item(3,3);

pa.print();
pb.print();
return 1; // 这是为什么?
}

别的问题没有发现
share_feelings 2009-05-11
  • 打赏
  • 举报
回复
把代码调试一下看看???
adventurelw 2009-05-11
  • 打赏
  • 举报
回复
没看出来有啥问题,只是对最后的return 1比较感兴趣。
liliangbao 2009-05-11
  • 打赏
  • 举报
回复
帮顶~

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧