2014年3月26日水曜日

開発環境

C++実践プログラミング (スティーブ オウアルライン (著)、Steve Oualline (原著)、Steve Oualline(原著)、望月 康司(翻訳)、クイープ(翻訳) 、オライリー・ジャパン)のⅢ部(高度な型とクラス)の15章(シンプルなポインタ)、15.8(設問の解答)、設問 15-3.を解いてみる。

その他参考書籍

設問 15-3.

コード(BBEdit, Emacs)

sample269.cpp

#include <iostream>
#include <string>

// 問題のコードのstd::stringへのポインタを返す
// std::string& tmp_name()
// 値を返すように変更
std::string tmp_name1()
{
  std::string name;

  static int sequence = 0;

  ++sequence;

  name = "tmp";

  name += static_cast<char>(sequence + '0');

  return (name);
}

// もう一つの解決方法
// nameをstatic変数に変更
std::string tmp_name2()
{
  static std::string name;

  static int sequence = 0;

  ++sequence;

  name = "tmp";

  name += static_cast<char>(sequence + '0');

  return (name);
}

int main(int argc, char *argv[])
{
  std::string name11 = tmp_name1();
  std::string name12 = tmp_name1();

  std::string name21 = tmp_name2();
  std::string name22 = tmp_name2();

  std::cout << "Name11: " << name11 << '\n';
  std::cout << "Name12: " << name12 << '\n';

  std::cout << "Name21: " << name21 << '\n';
  std::cout << "Name22: " << name22 << '\n';
  return (0);
}

Makefile

#
# FSFのg++コンパイラ用のMakefile
#
CC=g++
CFLAGS=-g -Wall
all: sample269

sample269: sample269.cpp
 ${CC} ${CFLAGS} -o sample269 sample269.cpp

clean:
 rm sample269

入出力結果(Terminal)

$ make && ./sample269
g++ -g -Wall -o sample269 sample269.cpp
Name11: tmp1
Name12: tmp2
Name21: tmp1
Name22: tmp2
$

0 コメント:

コメントを投稿