C ++:对与向量混合的指针的引用。我有麻烦

时间:2018-09-21 09:12:43

标签: java c++ pointers vector reference

我是编程的新手,但是已经研究了CJava

我现在开始学习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;
}

0 个答案:

没有答案