ビジネス WinDbgアプリケーション開発技術 イメージロード(ユーザモードとカーネルモード)


はじめてのC++プログラム

 「単純、かつ、分かりやすい」ソースコードを紹介しながら、CとC++の関係を具体的に考えていきます。最初のC++プログラムを見てみましょう。
#include <iostream>

int main()
{
  std::cout << "I don't know anything about programming!" << std::endl;

  const std::string ch = "I don't know anything about programming!\n";
  
  std::cout << ch.data();
  std::cout << ch.c_str();

  printf(ch.c_str());
  std::cout.write(ch.c_str(), ch.size());
  return int(0);
}
 このソースコードをご覧になり、多くの方は、次のような疑問のいくつかを持つのではないでしょうか。

・とにかく難しい!
・Cのソースコードとどこか似ている!
・#includeに続くiosteamという意味が分からない!
・「stdio.h」がないにもかかわらず、printf関数が呼び出されていることが不思議だ!
・std::coutのstdの意味が分からない!
・std::coutの「::」の意味が分からない!
・std::coutのcoutの意味が分からない!
・「<<」の意味が分からない!
・std::endlのendlの意味が分からない!
・「std::string ch」のstringの意味が分からない!
・「std::string ch」のchの意味が分からない!
・ch.data()の意味が分からない!
・ch.c_str()の意味が分からない!
・std::cout.writeの意味が分からない!
・ch.size()の意味が分からない!

 これらの疑問点のいくつに回答できるでしょうか。回答を用意できた場合、その回答を、たとえば、プログラミング経験のない企業経営者や人事部などの同僚に、「分かりやすく、かつ、飽きさせることなく」、説明する自信がありますか? 筆者は、これらすべての疑問点に「分かりやすい」回答を用意できるのであれば、その人は、IT業界で生きていくための十分な知識を備えていると考えています。次回からは、今回用意した上記疑問点リストへの回答を紹介していきます。

 上のソースコードは確かにCとC++が混在しています。C++設計者のBjarne Stroustrup氏のプログラミング言語Cに対する考え方を知っておきたい方は、本「IT談話館」のこの記事に目を通しておくとよいでしょう。文法やコーディング上の詳細ではなく、基本的な考え方や発想を学んでおくことが何よりも大切です。

一口メモ
 皆さんの多くは、"C++プログラムとはいったいどのようなものだろう"、"C++プログラムはCプログラムとどこがどのように違うのだろう?"、と目を輝かせてソースコードを追ったのではないでしょうか。しかし、紹介されたソースコードはきわめてCコードに似たものでした。特に、「プログラミング言語C++はクラスを使うもの」という先入観をお持ちの方は、"なにこれ!"とがっかりされているはずです。それではここで、次のソースコードをご覧ください。
#include <iostream>

class HelloMessage
{
private:
	std::string messHello;
	int ret;
	std::string messBye;

public:

	HelloMessage()
	{
		ret = 0;
		messHello = "";
	}

	HelloMessage(std::string str)
	{
		ret = 0;
		messHello = "\r\n";
		messHello.append(str);
		messHello.append("\r\n");
	}

	int SayHello()
	{
		if (messHello.size() == 0)
		{
			messHello.append("This is Takashi Toyota!\r\n\r\n");
			return 0;
		}
		else
		{
			std::cout << messHello.data();
			std::cout << messHello.c_str();
			ret = printf(messHello.c_str());
			std::cout.write(messHello.c_str(), messHello.size());
			return ret;
		}
	}
	
	virtual ~HelloMessage()
	{
		messBye = "GoodBye!\r\n\r\n";
		std::cout.write(messHello.c_str(), messHello.size());
	}

};


	
int main()
{
	HelloMessage hm("Our first C++ program!");
	int ret = hm.SayHello();
	printf("\r\n%d\r\n", ret);
           return int(0);
}

 このソースコードは、一般には、クラスを使ったプログラミングといわれるものです。今回はこのソースコードの詳しい説明は致しません。本文で紹介したソースコードとこのソースコードを比較し、何かを感じとっていただければ、それで十分です。クラスを使用すると、覚える約束事がぐんと増えますが、その分、表現力もぐんと上がります。さらに、既存コードの再利用性や保守性も大幅に改善されます。

前へ | 次へ




 WinDbg入門  ホーム


Copyright©豊田孝 2004- 2009
本日は2009-01-06です。