使用初始化列表时如何获取私有数据?
How to get private data when you're using a initialization list?
我现在正在C++中学习面向对象程序,我刚刚遇到了一个小问题。
当在基类中使用列表初始化时,如何从派生类中的基类获取私有数据?
class CPunct
{
private:
double x;
double y;
public:
CPunct(double a, double b) : x(a), y(b) {} //initialization list
};
class CDreapta :public CPunct
{
public:
friend void lineFrom2Points(CPunct& a, CPunct& b) // Function to find the line by two points
{
double expr1 = b.y - a.y; //expresion 1
double expr2 = a.x - b.x; //expresion 2
double expr3 = expr1 * (a.x) + expr2 * (a.y); //expresion 3
if (expr2 < 0)
{
std::cout << "The line passing through points a and b is: "
<< expr1 << "x " << expr2 << "y = " << expr3 << "n";
}
else
{
std::cout << "The line passing through points a and b is: "
<< expr1 << "x + " << expr2 << "y = " << expr3 << "n";
}
}
};
在我的代码中,我试图将使用基类CPunct中私有数据的函数(lineFrom2Points(声明为友元,但似乎不起作用。请给我一个建议!非常感谢。
lineFrom2Points
是CDreapta
的朋友,而不是CPunct
。CDreapta
继承自CPunct
,这并不能使此函数成为CPunct
的朋友。CCD_ 7本身是相当无用的。它的数据成员是private
,即使在派生类中也无法访问。您可能希望将它们设为protected
,或者添加公共或受保护的成员函数来访问它们。
几个例子:
class CPunct {
private:
double x;
double y;
public:
CPunct(double a, double b) : x(a), y(b) {}
friend void lineFrom2Points(CPunct& a, CPunct& b) {
// can access a.x, a.y, b.x, b.y here
}
};
class CPunct {
protected:
double x;
double y;
public:
CPunct(double a, double b) : x(a), y(b) {}
};
class CDreapta : public CPunct {
public:
using CPunct::CPunct; // inherit the CPunct constuctor
friend void lineFrom2Points(CDreapta& a, CDreapta& b) {
// can access a.x, a.y, b.x, b.y here
}
};
class CPunct {
private:
double x_;
double y_;
public:
CPunct(double a, double b) : x_(a), y_(b) {}
double x() const { return x_; }
double y() const { return y_; }
};
class CDreapta : public CPunct {
public:
using CPunct::CPunct;
};
void lineFrom2Points(CDreapta& a, CDreapta& b) {
// can access a.x, a.y, b.x, b.y here via x() and y()
}
对于CPunct这样的类型,没有必要将其成员设为私有。因此,最好将这个类重新定义为具有公共成员的结构。
struct CPunct
{
double x;
double y;
CPunct(double x_, double y_) : x(x_), y(y_) {}
};
相关文章:
- C++ - 忽略并从其他文件获取数据
- 如何从网站获取数据并将其传输到数据库?
- 与多个 for 循环与单个 for 循环 wrt 相关的性能从多映射获取数据
- 如何从 CSV 获取数据并将其存储在 C++ 中的表对象中
- 获取 R 数据帧的内存地址
- C++ 如何从虚拟类的模板化子类中获取数据?
- 如何在C++中使用带有SFML的http reqest从节点.js服务器获取数据?
- 连接到远程存储库并获取数据
- 使用WiFi.h从WiFiClient ESP32获取数据
- CSV文件未从缓冲区获取数据
- C++从双指针获取数据
- C++ 从文件中获取数据时使用 strcpy 和 strcmp 按字母顺序对数组进行排序?
- 使用 Recvfrom 获取数据
- C 编程:在循环时运行 2 并从 loop1 获取数据的随机结果
- 复制构造函数并从方法中获取数据
- 如何在运行时从平面缓冲区获取数据值和数据类型
- 在C J2ME中读取Excel文件,并从ITQ获取数据
- 如何通过NodeMCU从Web获取数据
- 获取数据QFUTUREWATCHER
- 从文件中获取数据时如何放置换行符?