• ベストアンサー

関数の作成は・・・?

今までVBAやjavascriptを使ってきたのですが、少しづつVisual StudioでC++を覚えようと思います。 そこで、VBAやJSで使ってきた、「function 関数名(引数)」というのはC++だとどういう記述になるのでしょうか?JSだと 関数の作成----------------------------------  function getSecond(hour, min, sec)  {   var answer = hour * 3600 + min * 60 + sec;   return(answer);  } ここまで------------------------------------ 関数の利用----------------------------------  document.write(getSecond(12, 34, 56)); ここまで------------------------------------ で値が返ってきます。 どうもクラスというのがVBAやJSにはないのでこのクラスがそうなのかと思うのですがいまいち読んでいてわかりません…。 上記のような単純な例だとどのように記述するのですか? 非常に単純な質問ですみません…。

質問者が選んだベストアンサー

  • ベストアンサー
  • RAPTsong
  • ベストアンサー率42% (74/175)
回答No.4

C++ だから、クラスを使わないと、ということはありません。 VB の function は、C/C++ での関数なので、#1 さんの書き方で OK です。 function 関数名( 引数 ) {   式;   return 戻り値; } は、C/C++ だと、 戻り値の型 関数名( 引数 ) {   式;   return 戻り値; } と書けます。 また、 sub プロシージャ名( 引数 ) {   式; } は、C/C++ では、 void プロシージャ(=関数)名( 引数 ) {   式; } と等価になります。

suffre
質問者

お礼

ありがとうございます。クラスを使わなくてもVBやJSのようにできるのですね。 この方法でうまくできました! しかし、そうするとクラスはどのようなときに使うのか・・・勉強が足りないのでご紹介いただいた本などを読んでみたいと思います。

その他の回答 (4)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.5

> C++ だから、クラスを使わないと、ということはありません。 賛成。 C++の利点を活かしたいなら、無理やりクラスを使うより、むしろテンプレートを使う方がよいでしょう。 template<typename T> T getSecond(T hour, T min, T sec) {  T answer = hour * T(3600) + min * T(60) * sec;  return answer; }

suffre
質問者

お礼

テンプレート・・・初めて知りました。 #4さんの方法でうまくできましたが、似たような方法のようですね。

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.3

あれ?書いたつもりが消えてましたね。訂正します。 クラスの利用---------------------------------- CTimeFunc timefunc; //インスタンスの生成。 cout << timefunc.getSecond(12, 34, 56); ここまで------------------------------------

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.2

#1のasuncionさんの書き方はC言語の書き方でクラスじゃないです。 C++言語を学びたいんですよね? ちゃんと本を買って学ぶことをお勧めします。 「明解 C++」 柴田 望洋 (著) http://www.amazon.co.jp/%E6%98%8E%E8%A7%A3-C-%E6%9F%B4%E7%94%B0-%E6%9C%9B%E6%B4%8B/dp/4797334819/ref=sr_1_1/250-0399562-6461017?ie=UTF8&s=books&qid=1192874321&sr=1-1 これだけだと理解に苦しむと思うので、「C++ の絵本」を補助として買うことをお勧めします。 http://www.amazon.co.jp/C-%E3%81%AE%E7%B5%B5%E6%9C%AC-%E6%A0%AA-%E3%82%A2%E3%83%B3%E3%82%AF/dp/4798108936/ref=pd_sim_b_1_img/250-0399562-6461017?ie=UTF8&qid=1192874321&sr=1-1 確かにクラスは作ったことは無いでしょうがクラスに似たものを既にあなたは利用しています。 document.writeがそれで、documentというオブジェクトのインスタンス(生成されたクラス)のwriteというメンバ関数を利用していますね。C++のクラスは、それを作るという行為です。 クラスなら、 クラスの作成---------------------------------- class CTimeFunc { public:  int getSecond(int hour, int min, int sec)  {   int answer = hour * 3600 + min * 60 + sec;   return answer;  } }; ここまで------------------------------------ クラスの利用---------------------------------- timefunc; //インスタンスの生成。 cout << timefunc.getSecond(12, 34, 56); ここまで------------------------------------ ただ関数をクラス化したので、オブジェクト指向としては意味を成していませんが、こんな風に書けると言うことで。

suffre
質問者

お礼

なんとなくわかりました。 クラスを作って、インスタンスを生成して使うのですね。

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.1

いろいろな書き方がありますが、一例を挙げると下記のようになります。 #include <stdio.h> int getSecond(int hour, int min, int sec) {   return hour * 3600 + min * 60 + sec; } int main(void) {   printf("%d秒\n", getSecond(12, 34, 56));   return 0; } (注)インデントのため、全角空白を使っています。

suffre
質問者

お礼

ありがとうございます。Cの本を買ってきてみました。 そのような記述になるのですね。

専門家に質問してみよう