刚刚编译了一下,成员函数操作没有问题,这里主要记一下Record和Key的比较知名实现。
老师给的PPT有两种实现方式
1.用operator T()隐式转换将Record转为Key
class Record{
public:
operator Key( ); // Record to Key 的隐式转换 .
Record(int x=0, int y=0);
private:
int key;
int other;
};
Record::operator Key( ){
Key tmp(key);
return tmp;
}
这里的T是要转换的类型,在我们的例子中就是Key,将Record转换为Key类型。
实现函数中的tmp是一个Key类型的值,初始化tmp.key为record.key中的值,然后返回这个Key类型的变量,就将Record转化成Key了。
2.利用Key的拷贝构造函数
class Key {
int key;
public:
Key (int x = 0);
Key (const Record &r);
int the_key( ) const;
};
bool operator == (const Key &x, const Key &y);
Key::Key(const Record &r){
key=r.the_key();
}
class Record{
public:
Record(int x=0, int y=0);
int the_key() const;
private:
int key;
int other;
};
int Record::the_key() const{
return key;
}
说实话这个方法看上去有点绕口令惹。
核心是在调用Key(const Record &r)临时构造一个Key tmp,其中tmp.key = r.key,然后用 == 比较再调用Key类的析构函数释放tmp。