2015-12-20 21 views
12

Tôi biết Java và bây giờ muốn học C++. Tôi không thể hiểu được những gì là cout (dòng đầu ra ký tự) và cin (đầu vào ký tự). Có phải các biến toàn cục này không? Sau đó, lý do tại saoChính xác thì cout/cin là gì?

"My message">>cout; 

không hoạt động? Nhưng

cout<<"My message"; 

hoạt động.

+0

Dưới đây là một mô tả đơn giản mà bạn có thể bắt đầu với: http://www.cplusplus.com/reference/iostream/cin/ – Ziezi

+0

Một tìm kiếm đơn giản trên google có thể dẫn đến câu trả lời của bạn. –

Trả lời

22

cout là phiên bản của lớp std::ostream và có, đó là biến toàn cầu. Nhưng operator>>(char *, ostream& os); chưa được khai báo bởi tiêu đề có liên quan, vì vậy "My message">>cout; sẽ đưa ra lỗi giống như "không thể tìm thấy toán tử >> có đối số const char * và std :: ostream" (và có thể có nhiều lỗi hơn vì đôi khi các trình biên dịch trở nên rất bối rối bởi những thứ này).

cin là điều tương tự, ngoại trừ std::istream

Nếu bạn thực sự muốn gây rối với người đứng đầu, bạn có thể làm:

template<typename T> 
std::ostream& operator>>(T x, std::ostream& os) 
{ 
    os << x; 
    return os; 
} 

Tất nhiên, nó sẽ không làm việc cho "My Message " >> "Some other string" >> cout;, đó là có lẽ một trong những lý do nó không được thực hiện theo cách đó.

Lưu ý rằng đây chỉ đơn giản là lạm dụng nhẹ của quá tải toán tử, trong đó chúng tôi có loại tùy chỉnh ở phía bên trái và loại tiêu chuẩn hoặc không chuẩn ở phía bên tay phải. cout không khác với một số biến khác của loại tùy chỉnh.

+0

chính xác, rất thú vị, +1 – manetsus

+1

Để cụ thể hơn, cout là một phần của lớp đầu ra và cin là một phần của lớp đầu vào. EX: 'std :: string str; std :: cout << "Nhập một giá trị:"; std :: cin >> str; std :: cout << "Bạn đã nhập" << str << std :: endl; ' –

1

xem xét các mũi tên dưới dạng luồng. < < là viết tắt của luồng đầu ra, trong khi >> là viết tắt của luồng đầu vào.

nên cout < < "hello" có nghĩa là đầu ra cho màn hình khi cin >> một phương tiện yêu cầu từ một đầu vào sử dụng cho biến a cout

cũng có thể sử dụng "+" như ví dụ bạn có thể thêm dây để một dòng như thế này

cout < < "Hello" < < "thế giới" < < "tôi john";

cin theo cùng một cách có thể yêu cầu đầu vào từ nhiều biến

cin >> a >> b; sẽ yêu cầu người dùng nhập hai lần một cho mỗi biến

6

std::coutstd::cin thực sự là các biến toàn cầu. Mã của bạn không biên dịch vì đó không phải là cách ngôn ngữ hoạt động. Bạn phải đặt luồng ở bên trái, sau đó là toán tử và sau đó là các biến mà bạn đang truyền vào/ra. (Đối với đầu ra, bạn có thể sử dụng chữ và biểu thức cũng như biến.)

1

iostream là tệp tiêu đề chứa các lớp xử lý thao tác nhập và xuất cho bảng điều khiển. Nó giống như bạn tạo một đối tượng khi bạn nói "cin" cho thao tác nhập xử lý lớp đầu vào cho một bàn điều khiển trong tệp tiêu đề. Tương tự như vậy có thể nói về "cout", nơi một đối tượng đang được tạo từ một hoạt động đầu ra xử lý lớp tới một bàn điều khiển trong tệp tiêu đề.

Khi bạn xem "cin", hãy tưởng tượng việc tạo một đường ống được kết nối với bảng điều khiển và chương trình của bạn và một đối tượng "cin" lấy đầu vào của bạn từ bảng điều khiển mà bạn cung cấp thông qua bàn phím và đổ chúng vào chương trình. Đó là lý do bạn có thể thấy một toán tử ">>" cho cin và bạn có thể tìm thấy sự tương tự với đường ống nơi toán tử đang thực hiện công việc chỉ định hướng cho đối tượng "cin".

Trong khi "cout", hãy tưởng tượng tạo đường ống được kết nối với bảng điều khiển và chương trình của bạn và đối tượng "cout" lấy đầu vào từ chương trình và bán chúng trên bảng điều khiển. Đó là lý do bạn có thể thấy một nhà điều hành "< <" cho cout và bạn tìm thấy sự tương tự với đường ống nơi toán tử đang thực hiện công việc chỉ định hướng cho đối tượng "cout".

Vì vậy, về cơ bản, trước tiên bạn cần xác định đối tượng bạn sẽ tạo cho hoạt động của mình và sau đó gán toán tử để hoàn thành tác vụ của bạn. Nếu bạn bao gồm các tập tin tiêu đề, sau đó nó giống như bạn có thể sử dụng những đối tượng bất cứ nơi nào trong suốt chương trình của bạn.

Vì vậy, "Thư của tôi" >> cout; không hoạt động theo cách bạn mong đợi bởi vì không có đối tượng và toán tử nào thực hiện nhiệm vụ của bạn trong khi cout < < "Thư của tôi"; làm.

Các khía cạnh kỹ thuật đã được mô tả bởi Mats Petersson. Đây chỉ là để cung cấp cho bạn một bức tranh chung về những gì thực sự xảy ra một cách hình ảnh. Hy vọng điều này sẽ giúp bạn.

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