0
void main() {
    cout << "Hello World" << endl;
}

我不允许对上述主要功能进行任何更改,而屏幕上的输出需要类似于:

初始化
Hello World
清理

我的想法是我需要使用<<. 但是我需要知道 operator 后面的双引号字符串的数据类型是什么<<,否则我不会充分利用我重新定义的<<operator。有人有什么想法吗?

4

3 回答 3

4

文字的类型是“{suitable number of} const chars 的数组”,但更好的方法可能是拥有某种全局对象。

(为数组添加重载可能甚至不起作用,因为现有的重载char const *会妨碍。)

于 2013-09-29T23:00:08.560 回答
2

你可以重新定义std::ostream& operator<< (std::ostream&, const char*). 这种方法有一个问题:它是未定义的行为。标准库已经定义了该函数,您不能重新定义标准库函数。

解决这个问题的关键是识别它cout在全局命名空间中。解决方案很简单:编写您自己的重载类operator<<并创建一个名为的全局变量,该变量cout是该类的一个实例。这样你就不会遇到未定义的行为。

您还需要对endl全局命名空间中的内容进行处理。

您的代码应该类似于

// Insert your code here.

int main () {
   cout << "Hello World" << endl;
}

由于这看起来像家庭作业,我将把剩下的留给你。

于 2013-09-30T00:01:45.413 回答
2

字符串文字的类型是字符串文字中char const[n]n字符数,包括终止的空字符。但是请注意,您的问题的解决方案不是重载operator<<(). 相反,您应该使用静态实时查看构造函数、析构函数和变量。

于 2013-09-29T23:06:35.593 回答