私には、珍しい宿題に問題があります。
main関数を変更せずに、出力として出力するプログラムを変更します。
- 月曜日
- 初日です
- その週の
そしてここに与えられたコードがあります:
int main()
{
cout << "is the first day\n";
}
どんな助けでもありがたいです:)
私には、珍しい宿題に問題があります。
main関数を変更せずに、出力として出力するプログラムを変更します。
- 月曜日
- 初日です
- その週の
そしてここに与えられたコードがあります:
int main()
{
cout << "is the first day\n";
}
どんな助けでもありがたいです:)
彼があなたのデモンストレーションに間違いなく興味を持っているのは、グローバルオブジェクト(同じ翻訳単位で定義されている)がメインに入る前に構築され、メインが出る後に破棄されるという事実です。
このようなグローバルオブジェクトが構築されているときは、std::cout
まだ存在していない可能性があることに注意してください(また、破棄されているときstd::cout
は、もはや存在しない可能性があります)。したがって、印刷は、のようなC関数を介して行う必要がありますprintf
。
宿題の質問が悪いようです。これをオーバーライドする別のメインメソッドを作成しない限り、メインメソッドを変更せずに他の出力を出力する方法はわかりません。提供するコードも間違っています。mainは整数を返すことが期待されているため、0を返す必要があります。
これはどうですか?
#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";
}
更新 OK、iostream以外のオブジェクトのように、メイン関数で「cout」という名前を使用できます。
#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";
}
それの楽しみのためだけに、もう一つの凶悪な考え:
#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";
}
これを行うには、少なくとも2つの方法があります。
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";
}
メインに入る前またはメインから出た後に起こることを考えてください。
あなたがこれらのことを知っているならば、それはあなたがあなたのコースでどこにいるかに本当に依存します。
代替:mainで使用されるオブジェクトは、std::cout
その名前をグローバル名前空間に取り込む場合のみです。::std以外の名前空間内のオブジェクトにもその名前を付けることができます。
出力ストリームに対して演算子をオーバーロードする必要があると思います。