我对不寻常的作业有疑问:
不要修改 main 函数,但要更改它作为输出打印的程序:
- 周一
- 是第一天
- 一周中的
这是给定的代码:
int main()
{
cout << "is the first day\n";
}
任何帮助将不胜感激 :)
我对不寻常的作业有疑问:
不要修改 main 函数,但要更改它作为输出打印的程序:
- 周一
- 是第一天
- 一周中的
这是给定的代码:
int main()
{
cout << "is the first day\n";
}
任何帮助将不胜感激 :)
毫无疑问,他对您的演示感兴趣的是一个全局对象(在同一个翻译单元中定义)将在进入 main 之前构建,并在 main 退出后销毁。
请注意,当构建这样一个全局对象时,std::cout
可能还不存在(当它被销毁时,std::cout
可能不再存在),因此您所做的任何打印都必须通过 C 函数,如printf
.
至少有几种方法可以做到这一点。
cout
。main
被调用之前和之后。重新定义cout
:
#include <iostream>
class MyCout {};
void operator<<(MyCout& myCout, const char* message) {
std::cout << "Monday\n";
std::cout << message;
std::cout << "of the week\n";
}
MyCout cout;
int main()
{
cout << "is the first day\n";
}
为了使事情发生在 main 之前和之后,您可以创建一个静态对象。它们的构造函数在 main 之前调用,然后是析构函数:
#include <iostream>
class PrintExtras {
public:
PrintExtras() {
std::cout << "Monday\n";
}
~PrintExtras() {
std::cout << "of the week\n";
}
};
PrintExtras printExtras;
using std::cout;
int main()
{
cout << "is the first day\n";
}
What about this?
#include <iostream>
#include <cstdlib>
using namespace std;
struct Foo
{
Foo()
{
cout << "Monday\nis the first day\nof the week\n";
exit(0);
}
} X;
int main()
{
cout << "is the first day\n";
}
Update Ok, you may use name 'cout' in main func like some object not from iostream:
#include <iostream>
#include <string>
class Foo
{
public:
void operator <<( const std::string & s )
{
std::cout << "Monday\n" << s << "of the week";
}
} cout;
int main()
{
cout << "is the first day\n";
}
似乎是一个糟糕的家庭作业问题。我看不到在不修改主方法的情况下无法打印其他输出 - 除非您创建了另一个主方法来覆盖它?!提供的代码也是错误的 - 它应该返回 0,因为 main 应该返回一个整数。
另一个残酷的想法,只是为了好玩:
#include <iostream>
using namespace std;
#define main real_main
int main()
{
cout << "is the first day\n";
}
#undef main
int main()
{
cout << "Monday\n";
int res = real_main();
cout << "of the week\n";
return res;
}
另一个不依赖预处理器 foo 的版本是使用全局静态对象构造和销毁。这是安全的,因为显然标准保证std::cout
(和朋友)在所有用户代码之前/之后被初始化和销毁:
#include <iostream>
using namespace std;
struct Homework
{
Homework()
{
cout << "Monday\n";
}
~Homework()
{
cout << "of the week\n";
}
} hw;
int main()
{
cout << "is the first day\n";
}
我认为您应该为输出流设置一个运算符重载。
想想进入 main 之前或退出 main 之后发生的事情。
如果您了解这些事情,这实际上取决于您在课程中所处的位置。
替代方案: main 中使用的对象仅std::cout
当您将该名称带入全局命名空间时。::std 以外的命名空间中的对象也可以使用该名称。