重写C++中的方法
Override methods in C++
我应该创建一个基类(P2D)和一个派生类(P3D),前者表示二维中的点,后者表示三维中的点。在第一个类中,我这样创建了一个方法:
virtual istream& set(istream&); //sets the values
istream& P2D::set(istream& in){
in >> x >> y;
return in;
}
在第二类中:
istream& set(istream&); //sets the values
istream& P3D::set(istream& in){
P2D::set(in);
in >> z;
return in;
}
在主函数中,我考虑将所有点(无论它们是二维还是三维)放在一个向量中,然后以某种方式使用上面的set
方法将所有点设置在while
循环中。这是一段有问题的代码:
vector<P2D*> points;
bool ans(true);
P2D* p;
while(ans){
cout << "Insert a point" << endl;
p->set();
points.push_back(p);
cout << "Do you want to insert another point? ";
cin >> ans;
}
我知道这是错误的,我知道为什么,但有没有机会不使用普通记忆来克服这一点?如果用户想插入二维点或三维点,我是否被迫让他选择?
在我看来,这似乎被打破了,因为继承意味着"是一个"关系,而3D点肯定不是2D点。
这反映了你的问题,因为没有一种优雅的方法可以按照你的建议来做。IMO,用户必须决定是输入2D点还是3D点,但将其保留为2D点的集合仍然没有意义。
这完全取决于您以后对集合中的点要做什么。也许你应该有一个Point
类型作为2D和3D点的父对象,但如果没有更大的上下文,很难判断。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 通过方法访问结构
- 最小硬币更换问题(自上而下方法)
- C++为构建时间获取QDateTime的可靠方法
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 有什么方法可以遍历结构吗
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 使用std::函数映射对象方法
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- C++从另一个类访问公共静态向量的正确方法是什么
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 没有为自己的结构调用列表推回方法
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 在类定义之后定义一个私有方法
- 枚举环境变量的惯用C++14/C++17方法
- 初始化具有非默认构造函数的std::数组项的更好方法