2012-04-27 37 views
17

Tôi đang cố gắng tìm cách vượt qua fout hoặc cout đến một hàm. Tôi nhận ra có những cách dễ dàng để xử lý vấn đề này, như đặt ifs trong bất kỳ hàm nào xuất dữ liệu hoặc thậm chí chỉ cần viết hàm theo cả hai cách. Tuy nhiên, điều đó có vẻ nguyên thủy và không hiệu quả. Tôi không tin rằng mã này sẽ hoạt động, tôi sẽ đặt nó ở đây để đảm bảo dễ dàng thấy được những gì tôi muốn "làm". Xin lưu ý rằng tôi đang tham gia một lớp thiết kế thuật toán bằng cách sử dụng C++, tôi không phải là một lập trình viên C++ dày dạn kinh nghiệm. Lớp học của tôi bị giới hạn sử dụng các tiêu đề bạn thấy.Có thể vượt qua cout hoặc fout đến một chức năng không?

#include <iostream> 
#include <iomanip> 
#include <fstream> 

using namespace std; 
void helloWorld(char); 
ofstream fout; 

int main() 
{ 
    fout.open("coutfout.dat"); 
    helloWorld(c); 
    helloWorld(f); 

    return 0; 
} 
void helloWorld(char x) 
{ 
    xout << "Hello World"; 
    return; 
} 

Trả lời

33

Những cả kế thừa từ ostream vì vậy hãy thử này:

void sayHello(ostream& stream) 
{ 
    stream << "Hello World"; 
    return; 
} 

Sau đó, trong chính, vượt qua trong đối tượng (cout hoặc bất cứ điều gì) và nó sẽ làm việc tốt.

+0

Nó hoạt động! Tôi biết nó không thể khó khăn như tôi đã làm cho nó. Cảm ơn nhiều! – ChiefTwoPencils

+3

Không sao cả. Xem http://en.cppreference.com/w/cpp/io/basic_ostream cho lớp cơ sở. –

+0

@Kevin Sau khi đọc liên kết bạn đã cung cấp, tôi nghĩ rằng hàm sẽ trả về 'luồng' được đưa ra làm đối số ...' std :: ostream & sayHello (std :: ostream & stream) {dòng trả về << "Hello World";} ' – GingerPlusPlus

12

Có. Hãy để chức năng của bạn được

sayhello(std::ostream &os); 

Sau đó, trong chức năng, bạn có thể sử dụng os ở vị trí của xout.

(. By the way, using namespace std bãi toàn bộ namespace std và không được khuyến khích Một using std::cout và những thứ tương tự là được rồi, mặc dù.)

+0

Cảm ơn. Tôi đã nhận thấy rằng định dạng dường như là quy ước. Vì vậy, hiện một 'sử dụng std :: cout' tạo ra một" phím tắt "làm cho nó có thể sử dụng' cout', nhưng để lại phần còn lại của không gian tên std trong nguyên vẹn? – ChiefTwoPencils

+0

@RobertoWilko: Đúng vậy. 'Using std :: cout' giới thiệu tên' cout' vào không gian tên hiện tại để sử dụng ngay lập tức (điều này có nghĩa là bạn không thể truy cập một biến cục bộ có tên 'cout', nếu có). – thb

Các vấn đề liên quan