-3 c++
为什么当我调用testPolynomial它显示对象的最后一个值并且不会创建一个初始化为 0 的新对象时?
为什么它仍然在臀部并且在完成第一个函数调用 ( testPolynomial) 函数时不会构造自己?
多项式
#ifndef Header_h
#define Header_h
class Polinomial {
private:
static int degree;
static int falsse_degree;
static double coEfArr[10];
public:
//----------methods-------//
static int getMaxDegree(){return degree;}
static void printIndexDeg(int index){std::cout<<coEfArr[index];};
int getDegree(bool b){ if (b==true){return degree;}return falsse_degree;}
void findAndSetRealMaxDegree(){
int max=0;
for (int i=0; i<10; i++)
{
if (coEfArr[i]!=0)
{
max=i;
}
}
degree=max;
}
void setCoeff(int index, double coef_d)
{
coEfArr[index]=coef_d;
findAndSetRealMaxDegree();
};
static void fillWithZeros(){
for (int i=0; i<10; i++) {
coEfArr[i]=0;
}
}
;
//------ End of methods-----//
//------Begining of constructors----//
Polinomial();
Polinomial(int deg);
Polinomial(double arr[],int deg);
//-------------end of constructors-----------------//
//------copy constructors-------//
Polinomial (const Polinomial &p2);
friend std::ostream& operator<<(std::ostream& os, const Polinomial& p);
void operator = (const Polinomial &poli_obj )
{
fillWithZeros();
degree=poli_obj.degree;
falsse_degree=poli_obj.falsse_degree;
for (int i=0; i<degree; i++)
{
coEfArr[i]=poli_obj.coEfArr[i];
}
}
void * operator new(size_t size)
{
std::cout<< "Overloading new operator with size: " << size << std::endl;
void * p = malloc(size);
return p;
}
void operator delete(void * p)
{
std::cout<< "Overloading delete operator " << std::endl;
free(p);
}
};
////////////
//////////
////////////
//----------------------End of class Polinomial ------------------------//
int Polinomial::degree{0};
int Polinomial::falsse_degree{0};
double Polinomial::coEfArr[]{0};
//constructor
Polinomial::Polinomial()
{
degree=0;
};
Polinomial::Polinomial(int deg)
{
degree=0;
falsse_degree=deg;
};
Polinomial::Polinomial(double arr[],int deg)
{
falsse_degree=deg;
for (int i=0; i<=deg; i++)
{
coEfArr[i]=arr[i];
}
findAndSetRealMaxDegree();
}
//copy constructor
Polinomial::Polinomial(const Polinomial &p2){
falsse_degree=p2.falsse_degree;
for (int i=0; i<=p2.degree; i++)
{
coEfArr[i]=p2.coEfArr[i];
}
findAndSetRealMaxDegree();
}
std::ostream& operator<<(std::ostream &os, const Polinomial &p)
{
os<<"Polinomial=";
if (p.degree==0 && p.coEfArr[0]==0)
{
os<<0;
return os;
}
else
for (int i=0; i<=p.degree; i++)
{
if (i==0) {
os<<p.coEfArr[i];
}
else
os<<"+"<<p.coEfArr[i]<<"X^"<<i;
}
return os;
};
#endif /* Header_h */
Run Code Online (Sandbox Code Playgroud)
理性.h
#include "Polynom.h"
#ifndef rational_h
#define rational_h
class Rational
{
private:
static Polinomial* nom;
static Polinomial* de_nom;
public:
static void getDeNom(){std::cout<<*de_nom<<std::endl;};
static void getNom(){std::cout<<*nom<<std::endl;};
Rational();
};
Polinomial* Rational::nom=new Polinomial();
Polinomial* Rational::de_nom=new Polinomial();
Rational::Rational()
{
de_nom->setCoeff(0, 1.0);
}
#endif /* rational_h */
Run Code Online (Sandbox Code Playgroud)
主程序
#include <iostream>
#include "Polynom.h"
#include "rational.h"
using namespace std;
void testPolynomial();
void testRational();
int main() {
testPolynomial();
testRational();
}
void testPolynomial()
{
cout<<"----- start testPolynomial ---------"<<endl;
cout<<"test0= "<<Polinomial::getMaxDegree()<<endl;
Polinomial p1;
cout<<"test1="<<p1<<endl;
Polinomial p2(6);
p2.setCoeff(2, 0.4);
cout<<"test2= "<<p2<<"degree="<<p2.getDegree(false)<<endl;
double c[]{0.1,0.2,0,11.5,1.3};
Polinomial p3(c,4);
cout<<"test3="<<p3<<endl;
p2.setCoeff(2, 0.0);
cout<<"test4= "<<p2<<endl;
cout<<"test6 MaxDegree= "<<Polinomial::getMaxDegree()<<endl;
cout<<"___________"<<endl;
}
void testRational()
{
cout<<"-----begind rational test-----"<<endl;
cout<<"test7"<<endl;
Rational r1;
r1.getNom();
}
Run Code Online (Sandbox Code Playgroud)
class Polinomial {
private:
static int degree;
static int falsse_degree;
static double coEfArr[10];
Run Code Online (Sandbox Code Playgroud)
这是因为您已经声明了所有字段static(为什么要这样做?)。因为它们是静态的,所以无论Polinomial您创建多少个对象,每个字段都只存在一个副本。删除关键字static。这可能需要对您的代码进行大量其他更改。
| 归档时间: |
|
| 查看次数: |
99 次 |
| 最近记录: |