读书人

重在类型转换符,该如何解决

发布时间: 2012-03-05 11:54:03 作者: rapoo

重在类型转换符

C/C++ code
 
//baselength.h
#ifndef BASELENGTH_H
#define BASELENGTH_H

class BaseLength {
public:
explicit BaseLength(double h=0.0);
virtual double length() const;
virtual ~BaseLength();
BaseLength(const BaseLength& a);
protected:
double haome;
};

class Inches : public BaseLength {
public:
explicit Inches(double h=0.0);
virtual double length() const;
virtual ~Inches();
Inches(const Inches& b);
/*********************
operator Meters() const;
operator Yards() const;
operator Perches() const;
**********************/
};

class Meters : public BaseLength {
public:
explicit Meters(double h=0.0);
virtual double length() const;
virtual ~Meters();
Meters(const Meters& c);
};

class Yards : public BaseLength{
public:
explicit Yards(double h=0.0);
virtual double length() const;
virtual ~Yards();
Yards(const Yards& d);
};

class Perches : public BaseLength{
public:
explicit Perches(double h=0.0);
virtual double length() const;
virtual ~Perches();
Perches(const Perches& e);
};

#endif

//baselength.cpp
#include <iostream>

#include "baselength.h"

using std::endl;
using std::cout;

BaseLength::BaseLength(double h) : haome(h) {
cout < <"BaseLength called!" < <endl;
}

double BaseLength::length() const {
return haome;
}

BaseLength::~BaseLength() {
cout < <"aa" < <endl;
}

BaseLength::BaseLength(const BaseLength& a) {
haome=a.haome;
}

Inches::Inches(double h) : BaseLength(h*25.4) {
cout < <"Inches called!" < <endl;
}

Inches::Inches(const Inches& b) {
haome=b.haome;
}

Inches::~Inches() {
cout < <"bb" < <endl;
}

/***********
operator Meters() const {
return Meters a(haome);
}

operator Yards() const {
return Yards a(haome);
}

operator Perches() const {
return Perches a(haome);
}
**********/


double Inches::length() const {
return haome/25.4;
}

Meters::Meters(double h) : BaseLength(h*1000) {
cout < <"Meters called!" < <endl;
}

Meters::Meters(const Meters& c) {
haome=c.haome;
}

Meters::~Meters() {
cout < <"ccc" < <endl;
}

double Meters::length () const {
return haome/1000;
}


Yards::Yards(double h) : BaseLength(h*36*25.4) {
cout < <"Yards called!" < <endl;
}

Yards::~Yards() {
cout < <"ddd" < <endl;
}

Yards::Yards(const Yards& d) {
haome=d.haome ;
}


double Yards::length() const {
return haome/25.4/36;
}

Perches::Perches(double h) : BaseLength(h*5.5*36*25.4) {
cout < <"Perches called!" < <endl;
}

Perches::~Perches() {
cout < <"eee" < <endl;
}

Perches::Perches(const Perches& e) {
haome=e.haome;
}

double Perches::length() const {
return haome/25.4/36/5.5;
}


//main.cpp
#include <iostream>

#include "baselength.h"



using std::endl;
using std::cout;
using std::cin;

int main() {
cout < <"read a haome at baselength!" < <endl;
double g=0.0;
cin>>g;
BaseLength a(g);
cout < <a.length() < <endl;

cout < <"read a inches at inches!" < <endl;
cin>>g;
Inches b(g);
cout < <b.length() < <endl;
cout < <b.BaseLength::length() < <endl;
/***********
Meters v=b;
cout < <v.length() < <endl;
*************/

cout < <"read a yards at Yards!" < <endl;
cin>>g;
Yards c(g);
cout < <c.length() < <endl;
cout < <c.BaseLength::length () < <endl;

cout < <"read a perches at perches!" < <endl;
cin>>g;
Yards d(g);
cout < <d.length() < <endl;
cout < <d.BaseLength::length() < <endl;

cout < <"read a meters at Meters!" < <endl;
cin>>g;
Meters e(g);
cout < <e.length() < <endl;
cout < <e.BaseLength::length() < <endl;
g=0.0;

return 0;
}




[解决办法]
代码中hecan add的地方就是我修改过的

读书人网 >C++

热点推荐