【发布时间】:2016-12-31 14:14:55
【问题描述】:
有人告诉我,使用多态性、封装和继承的原则将过程式C++ program 转换为面向对象的。
标准 C++ 程序接受来自用户的数据值和过滤器值。然后,它使用简单的算法将这些值相乘,并将输出打印到屏幕上。标准程序如下所示。
我首先决定使用一个用于“TheFilter”的类和一个用于“TheData”的类,每个类都有自己的“enterdata()”、“displaydata()”和构造函数成员函数。
我遇到的问题是criteria set 的一部分,“main() 应该只创建第一个对象”。我很难理解这一点,因为我见过的所有 OOP 代码示例都会在 main() 中生成对象。
我能想出的唯一当前解决方案是创建一个第三类(FilteredData - 见下文),它会在实例化自身时实例化其他类对象“OriginalData”、“Filter”和“FilteredData”。然而,这让我感到不安,因为它不会脱离封装的概念,因为它会导致一个类的成员是其他类对象?
如果有人对如何避免这种情况并最好地遵守封装原则有任何建议,我将不胜感激!
我讨厌承认失败,但我从未使用过面向对象的方法进行编程,而且我学习 C++ 也只有几个月的时间。请帮忙!
#include <iostream>
using namespace std;
class TheData
{
public:
TheData(double* = 0, unsigned long = 0, bool = false); //constructor function
~TheData();
void EnterData(TheData& OriginalData);
void DisplayData(TheData OriginalData, TheData FilteredData) const;
private:
double* Values;
unsigned long Length;
bool Valid;
}
class TheFilter
{
public:
TheFilter(double* = 0, unsigned long = 0, bool = false); //constructor function
~TheFilter();
void EnterData(TheData& OriginalData);
void DisplayData(TheData OriginalData, TheData FilteredData) const;
int ApplyFilter();
private:
double* Values;
unsigned long Length;
bool Valid;
}
class
{
public:
FilteredData(); // constructor function that somehow instantiates an object for the filter and the data???
void DisplayData();
private:
TheData data
TheFilter filter
double * filteredData
}
int main()
{
FilteredData Object1;
}
【问题讨论】:
标签: c++ oop object encapsulation