2013-11-26 4 views
2

Я собираюсь закончить программу, которую я пишу, и достиг контрольного блока. Я пытаюсь распечатать содержимое функции, называемой печатью, которая вызывается указателем.Функция печати в выходной файл

Моя проблема: мне нужно распечатать содержимое функции в выходной файл и не знаю, как это сделать.

Это моя печать функция:

void English::Print(){ 

    int formatlength = 38 - (static_cast<int>(firstName.size() + lastName.size())); 

    cout << firstName << " " << lastName; 
    cout << setw(formatlength) << finalExam; 
    cout << setprecision(2) << fixed << setw(11) << FinalGrade(); 
    cout << setw(4) << Lettergrade() << endl; 
} 

Это реализация функции печати:

for (int i = 0; i <= numStudents - 1; i++) { 
    if (list[i]->GetSubject() == "English") { 
     list[i]->Print(); 
    } 
} 

Если цикл является езда на велосипеде через мой список студентов.

Моя цель состоит в том, чтобы list[i]->Print() распечатывал мой выходной файл.

+2

Редактировать функцию, чтобы взять ссылку на ostream в качестве аргумента (используйте, возможно, 'cout' по умолчанию) и передать ей соответствующий выход для выходного файла, когда вы хотите, чтобы он записывался в файл вместо' cout'. –

ответ

5

Просто замените cout с ostream объекта, что-то вроде:

void English::Print(ostream& fout){ 
    //ofstream of("myfile.txt", std::ios_base::app); 
    int formatlength = 38 - (static_cast<int>(firstName.size() + lastName.size())); 

    fout << firstName << " " << lastName; 
    fout << setw(formatlength) << finalExam; 
    fout << setprecision(2) << fixed << setw(11) << FinalGrade(); 
    fout << setw(4) << Lettergrade() << endl; 
} 

Кроме того, вы можете перегрузить << оператор тоже в классе English

friend ostream& operator <<(ostream& os, const English& E) 
{ 
    // 
    return os; 
} 

А потом можно просто использовать:

fout << list[i] ;

+0

Я принял ваш совет, но возникли еще 3 проблемы. Это проект с использованием производных классов, и когда я ввожу эти параметры для своей функции Print(), тогда мои дочерние классы (английский, математика и история) получают ошибку для выделения объекта абстрактного класса. –

0

Помимо вышеуказанных ответов, я думаю, вы должны попробовать этот способ, используя оригинальную функцию перенаправления файлов С в:

Put эту инструкцию в первой строке главной функции:

int main(){ 
    freopen("out.txt", "w", stdout); 
    //your codes 

«вне. txt "- это файл, в который вы хотите поместить данные," w "означает, что вы хотите записать в файл, а stdout - это стандартный поток вывода, который был перенаправлен.

Смежные вопросы