重在类型转换符
- 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的地方就是我修改过的