【发布时间】:2021-12-05 10:31:36
【问题描述】:
我正在尝试学习面向对象编程,但遇到了一个问题。我有两个班级A 和B。我将命令行参数传递给类A,然后执行一些计算并形成一个二维向量。 (让我们将向量称为data)
我希望 B 类继承 A 类。
所以我想知道有什么方法可以在调用B 类的默认构造函数时打印二维向量data 的内容。
我尝试过的示例代码
class A
{
public:
vector<vector<string>>data;
fstream file;
string word, filename;
A()
{
}
A(string fileOpen)
{
file.open(fileOpen);
while (file >> word)
{
vector<string>rowTemp={word};
data.push_back(rowTemp);
}
}
vector<vector<string>> getVector()
{
return data;
}
};
class B:A
{
public:
B()
{
for(auto i:data)
{
for(auto j:i)
{
cout<<j<<' ';
}
cout<<endl;
}
}
};
int main(int argc, char* argv[]){
fstream file;
string word, filename;
file.open(argv[1]);
string fileOpen=argv[1];
A s(fileOpen);
B c;
return 0;
}
我基本上希望 B 类能够访问二维向量 data,以便我可以对其执行进一步的计算,而计算逻辑仍保留在 B 类中。
有没有办法做到这一点?
此外,正如您在 A 类中看到的,默认构造函数是空的。但它是必需的,因为没有它,我收到一个错误,即无法调用类 B 的默认构造函数。有没有更好的方法来写这个?因为有一个空的默认构造函数看起来很糟糕。
【问题讨论】:
-
请发帖minimal reproducible example。您可以删除文件读取,因为这对问题不是必需的,但会阻止其他人运行您的代码
-
您希望
B c;访问A s(fileOpen);的成员吗?它们是两个不相关的对象 -
就像
class的成员访问默认为private,继承也是如此。如果要访问父级的公共成员,则需要public继承。如class B : public A。 -
澄清一下,当你有类 A 和 B,并且 B 从 A 继承时,你(通常)没有显式的 A 实例,只有一个 B 实例,作为它有一个 A 的“嵌入式”实例。
-
听起来你把类和对象混淆了。
标签: c++ class oop inheritance