我是编程的新手,但是已经研究了C
和Java
。
我现在开始学习C++
。我为自己分配的第一批练习之一是将一个用Java
编写的小程序转换为C++
。现在,据我所知,Java
似乎使用指向对象的指针用于幕后的所有内容(在Java
“参考变量”中称为)或地址到对象(在Java
“引用”中称为“对象”),因此为什么您不能像在C++
中那样直接操作对象,而是使用“引用”。
因此,我想编写尽可能接近此 Java逻辑的程序,对任何对象使用指针而不是对象本身。但是,在尝试对 vector 使用基于范围的循环(每个)时遇到了一个问题。我发现的唯一解决方法是使用传统循环(常规用于)或放弃此 Java逻辑并直接使用对象。但是我想使用指针,而不是对象本身。
真的不可能吗?如果没有,我必须更改我的代码吗?
#include <iostream>
#include <vector>
using namespace std;
class File;
class FileGenerator {
public:
void generateFile(vector<File *> * &files);
};
class File {
public:
virtual void generate() = 0;
};
class FilePDF : public File{
public:
void generate();
};
class FileXML : public File {
public:
void generate();
};
void FileXML::generate(){
cout << "Generating XML file... " << endl;
}
void FilePDF::generate(){
cout << "Generating PDF file... " << endl;
}
void FileGenerator::generateFile(vector<File *> * &files){
///THIS WORKS FINE!
// for(int i = 0; i < files->size(); i++){
// files->at(i)->generate();
// }
///THIS DOES NOT WORK!
for(File *file : *files){
file->generate();
}
}
int main(){
vector<File *> *files = new vector<File *>;
files->push_back(new FilePDF);
files->push_back(new FileXML);
FileGenerator *fileGenerator = new FileGenerator();
fileGenerator->generateFile(files);
return 0;
}