基础类 CShp 和派生类:点(CPt)、线(CLn); 基础类包含如下接口(虚函数): a) 返回图形类型。 b) 保存数据到文件; c) 从文件读取数据; 然后在类点(CPt)、线(CLn)中实现虚函数。
时间: 2024-03-05 15:49:28 浏览: 23
下面是一个可能的实现示例:
```c++
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
class CShp {
public:
virtual string get_type() const {
return "Shape";
}
virtual bool save_data(const string& filename) const {
ofstream ofs(filename);
if (!ofs.is_open()) {
return false;
}
ofs << get_type() << endl;
return true;
}
virtual bool load_data(const string& filename) {
ifstream ifs(filename);
if (!ifs.is_open()) {
return false;
}
string type;
getline(ifs, type);
if (type != get_type()) {
return false;
}
return true;
}
};
class CPt : public CShp {
public:
virtual string get_type() const {
return "Point";
}
virtual bool save_data(const string& filename) const {
if (!CShp::save_data(filename)) {
return false;
}
// TODO: save point data
return true;
}
virtual bool load_data(const string& filename) {
if (!CShp::load_data(filename)) {
return false;
}
// TODO: load point data
return true;
}
};
class CLn : public CShp {
public:
virtual string get_type() const {
return "Line";
}
virtual bool save_data(const string& filename) const {
if (!CShp::save_data(filename)) {
return false;
}
// TODO: save line data
return true;
}
virtual bool load_data(const string& filename) {
if (!CShp::load_data(filename)) {
return false;
}
// TODO: load line data
return true;
}
};
int main() {
CPt pt;
pt.save_data("point.txt");
pt.load_data("point.txt");
CLn ln;
ln.save_data("line.txt");
ln.load_data("line.txt");
return 0;
}
```
在这个示例中,我们定义了基础类 `CShp`,其中包含了三个虚函数:`get_type()`、`save_data()` 和 `load_data()`。`get_type()` 返回图形类型,`save_data()` 将数据保存到文件,`load_data()` 从文件中读取数据。
然后我们定义了派生类 `CPt` 和 `CLn`,它们分别表示点和线。在这两个类中,我们重写了基础类中的三个虚函数,并实现了具体的保存和加载操作。注意,在实现具体操作时,我们都先调用了基础类的对应函数,以确保数据的一致性。
最后,在 `main()` 函数中,我们创建了一个点和一条线,并分别调用了它们的保存和加载函数,以测试实现的正确性。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)