要自定義C++ istream的行為,可以創建一個繼承自std::istream的新類,并重寫所需的函數,例如operator>>。下面是一個簡單的示例,演示如何創建一個自定義的istream類,將輸入流中的所有字母轉換為大寫:
#include <iostream>
#include <cctype>
class MyInputStream : public std::istream {
public:
MyInputStream(std::streambuf* buf) : std::istream(buf) {}
MyInputStream& operator>>(std::string& str) {
*this >> std::ws; // skip whitespace
char c;
str.clear();
while (get(c)) {
if (std::isalpha(c)) {
str += std::toupper(c);
} else {
putback(c);
break;
}
}
return *this;
}
};
int main() {
std::string input;
MyInputStream myStream(std::cin.rdbuf());
std::cout << "Enter a string: ";
myStream >> input;
std::cout << "Uppercase string: " << input << std::endl;
return 0;
}
在這個示例中,我們創建了一個名為MyInputStream的新類,它繼承自std::istream,并重寫了operator>>函數以實現自定義的行為。在main函數中,我們創建了一個MyInputStream對象,并使用它來讀取用戶輸入的字符串,并將其中的字母轉換為大寫后輸出。
通過類似的方式,您可以根據需要自定義istream的行為,以滿足特定的需求。