初歩的な質問なのですが、
関数とメソッドの違いが分からず悩んでいます。
書籍や人によって、
関数とメソッドは同じ物として書いている物もあれば、
メソッドはクラスに関連付いた関数としていたり、
クラスでもpublic関数だけとか、
引数のある物がメソッド、
逆に無い物がメソッド等々…で、
どれが正しいのか良く分からないのです。

関数とメソッドの違いを教えていただけますよう、
お願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (14件中1~10件)

正解だけ先に言っておきましょう。

オブジェクト指向での定義は
「メソッドとは、オブジェクトに送られてきたメッセージを処理するモノ」
「関数とは、メソッドの実装」
ついでに、
「メッセージとは、オブジェクトに何かしらお願いするために送られるモノ」
です。メッセージとメソッドと関数は明確に違うのですよ。


上記の通りなんですが、質問の文について、なにが正しいか、という解答は「文脈による」としか言いよ
うが無いんです。
解説書の一部分だけ抜き出して考えるのは非常に危険な行為です。
文脈を色々変えてみます。例えばオブジェクト指向の話をしているとしたら、

>1. 関数とメソッドは同じ物として書いている物もあれば、
バツ。意味的に全く異なります。
'\0'と""とNULLと0くらい違います。等価なんていってしまったら石が飛びます。(私が投げます:-p)

> 2.メソッドはクラスに関連付いた関数としていたり、
サンカク。C++での実装はそうでしょうが、オブジェクト指向を考える上で、その考え方は危険です。

> 3.クラスでもpublic関数だけとか、
> 引数のある物がメソッド、
> 逆に無い物がメソッド等々…で、
バツ。引数の数でメソッドで無くなる?そんなバカな!
例えprivateでもメソッドですよ。


オブジェクト指向言語C++のことを考えよう!という文脈ならば、
1.サンカク。実装は確かにそうなってます。ですが、上記の通り意味的に違うんです。
2.○。C++において、メソッドは「クラスに関連ついた関数」として実装されてます。
3.そんなわけないでしょう。

オブジェクト指向?なにそれ?構造体に関数がくっついただけでしょ?と乱暴極まりない文脈なら、
1.○。当然!
2.なにいってるの?
3.サブルーチンとファンクションの違いだ!


と、文脈で全然変わるんですよ。これに関しては、本一冊だけだとなかなか気付きにくいです。
是非とも多数の本を読み比べることをお勧めします。
    • good
    • 1
この回答へのお礼

ご返答ありがとうございます。
うーん、文脈で意味する所が変わってしまうのか…
単純な事かと思っていましたが、
意外と複雑な事だったようで。
皆様方のご意見とても為になりました。

お礼日時:2005/04/18 10:03

ちなみに、メソッドの実装は、必ずしも関数コールである必要はありません。



C++ や Java の実装がそうなっているというだけの話で、それ以外の実装になっている言語もあるでしょう。
# 実装レベルの話は、C++ と Java の話しか知らないものでして。。。
# たとえば、Smalltalk とか Objective-C とか Ruby なんて言語は
# どうなんでしょうか。

…と、なんだか結局のところ、jacta さんと同じことを繰り返してるような気がしてきました。。。
# No5 あたりで。
    • good
    • 0

No11 ency です。



ちょっと補足しておきます。

オブジェクト指向は、あるクラスのインスタンスを必要なときに動的に生成できるわけで、その各インスタンスに対して個別に何か処理をさせるのがメソッドなわけで。。。

ただ、実は C でも似たようなことは普通にやっているわけで。。。

------------------------------------------------
#define SIZE 10

FILE *fp1, *fp2;
char buf[SIZE];

fp1 = fopen( "hoge1.txt", "r" );
fp2 = fopen( "hoge2.txt", "r" );

fgets( buf, SIZE, fp1 );
fgets( buf, SIZE, fp2 );
------------------------------------------------

たとえば、これをこんなふうに書替えれば、なんとなくオブジェクト指向っぽくなりませんかねぇ?
(注)こんな言語はありません。

------------------------------------------------
#define SIZE 10

FILE *fp1, *fp2;
char buf[SIZE];

fp1 = new FILE( "hoge1.txt", "r" );
fp2 = new FILE( "hoge2.txt", "r" );

fp1.fgets( buf, SIZE );
fp2.fgets( buf, SIZE );
------------------------------------------------

ま、fopen() が new FILE になってオブジェクト生成っぽくなっているところは置いといて、その下。。。
最後の引数を、関数の前にもっていって変数と関数をドットでつないだだけ。。。

ま、メソッドなんて、乱暴な言い方をすればこんなものです。

あ、でも、これがすべてだと思わないでくださいね。
今後のオブジェクト指向の勉強にさしさわりがありますので。。。
あくまで、導入部分のイメージとしてとらえてください。
# しかも実装ベースの話なので、オブジェクト指向の本来の考え方とは
# 違う部分もありますし。。。
# オブジェクト指向は、こんな実装ベースの話からスタートしているのではなく、
# もっと上位の概念というか、抽象的なところからスタートしている話です。
# ですので、メソッドと関数も、考えているレベルというかレイヤというかが
# 違っているわけですね。
# 外部設計レベルの話がメソッドであるとするならば、それに対する実装を
# 設計する内部設計レベルの話が関数ということになりますかねぇ。。。
# だから、本来、同じとか違うとかいうような比較は、あまり意味がないのかも
# しれません。

それにしても、こう考えると、メソッドを関数コールで実装している言語がある理由もなんとなくわかりませんか?
    • good
    • 0

関数とメソッド、参照とポインタ…議論が平行線になる話題ですね。



私の理解としては「メソッドの実装として関数コールで機能を実現している言語がある」というところですね。

C++ では、メソッド相当の機能を「メンバ関数」と呼んでいるだけだと思っています。
Java のメソッドも、内部では関数コールで実現しているだけだと思いましたが違いましたっけ?

ま、このせいで C++ や Java は純正オブジェクト指向として認めない人たちもいると聞いたことがあります。

で、私の結論としましては次のとおりです。

1. メソッドはオブジェクトに対するメッセージ送信に対する応答。
2. メソッドの実装方法の一つとして関数コールで実現している言語がある。

もっと乱暴な言い方をすれば、「メソッド=関数」という理解でとりあえずは良いのではないでしょうか。
特に C からオブジェクト指向に移行する人たちは、まずはこの理解で良いと思います。

結局「なんだ、メソッドって関数コールじゃん!」っていう結論になることが多いようです。

# 「メッセージを送信して…」などという言葉があると、「スレッドが変わるのか?」
# などという誤解をする人たちもいるようなので。。。
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。
皆様方のご意見とても為になりました。

お礼日時:2005/04/18 10:03

> 元々メソッド(method)というコトバはSmalltalkで用いられたものではなかったかしら。



歴史的経緯はどうであれ、SmalltalkでもJavaでもC#でも、そこで使われている「メソッド」はC/C++から見れば他言語の概念に過ぎません。

#7 の回答のように、その言葉を使っている人と、今自分が扱っているものから判断するしかないと思います。

実際、FA機器を扱ったりしていると、顧客が使う「メソッド」は生産手法のことだったりするわけで、そこで開発するアプリケーションでもやはり「メソッド=生産手法」になるわけです。
というわけで、C/C++とは直接関係のない用語の定義を一意に定めることはできないと思います。
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。
皆様方のご意見とても為になりました。

お礼日時:2005/04/18 10:05

> 結局のところ、どなたのご意見が正しいのでしょうか。



元々メソッド(method)というコトバはSmalltalkで用いられたものではなかったかしら。
意味は「オブジェクトに送られたメッセージに対する反応」 であったはず。
だとすればメソッドはオブジェクト(レシーバ)を必要とするわけで(クラス・メソッドは例外)、そうでないものは関数と呼んで差し支えないのでは。

そんなわけで #1 が常識的なとこではないかと。
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。
皆様方のご意見とても為になりました。

お礼日時:2005/04/18 10:05

> だとすると、C#におけるメソッドはどうなんでしょう。

ただのメンバ関数をメソッドと'称している'に過ぎないように思えますが。

これはその通りだと思います。

C++の「オブジェクト」というのも、オブジェクト指向でいうところの「オブジェクト」と必ずしも等価でないのと同様、C#における「メソッド」もその言語内のローカルな定義に過ぎないのでしょう。
    • good
    • 0

色々な回答があり情報が錯綜していますが。

。。「関数=メソッド」と考えていいと思います。

まずC++の言語仕様には「メソッド」はないと思います(私自身仕様を把握しているわけではないので自信はありません、ないと思います)。

そのためC++(の仕様)において「メソッドと関数の違いは?」という質問への正確な回答はないと思います。

とは言うもののC++に関しても様々な場面で「メソッド」という言葉が使われています。

Visual C++で「メソッド」という言葉が使われている場面もあります。COM(ActiveX)で外部から操作できる関数を「メソッド」と呼びます(同じように外部から参照や操作できる変数は"プロパティ"と呼びます)。これはマイクロソフトなどが使っているC++での「メソッド」という言葉です。

またC++以外の言語を使っていて新しくC++を始めた人などは「メソッド=関数」という意味合いで使っていることもあります。また「クラスのメンバー関数=メソッド」として扱っている人もいます。これらは多くの場合上で述べたマイクロソフトの"メソッド"という言葉とは違う意味で使っています。


つまり「メソッド」という言葉はきちんとした定義がない(?)ためにその言葉を使っている人によって意味合いが違っています。「メソッド」という言葉に出会ったらその時々でその意味を判断する必要があると思います。しかしどの場合にも"メソッド"が"関数"の1種であることには変わりはないので「メソッド=関数」と考えていいと思います。
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。
私としてはクラスのメンバ関数がメソッドの事で、
メンバ関数と言う言い回しは、C/C++の方言だと考えていたのですが、
改めて調べ直すと、他の方々のご返答のように、
人によってまちまちなので、何が正しいのか確信がもてなくなりました。
多くの方々から、ご返答を頂けましてありがたいのですが、
結局のところ、どなたのご意見が正しいのでしょうか。

お礼日時:2005/04/12 09:40

#5> 「標準出力というオブジェクトに、putsというメッセージを送ると、文字列が出力されるというメソッドが実行される」といった具合に、メンバ関数とは直結しません。



なるほど、「オブジェクトに送られたメッセージに対する反応」がメソッドで、その実現手段の一つがメンバ関数だと(それでいいですか?)。

だとすると、C#におけるメソッドはどうなんでしょう。ただのメンバ関数をメソッドと'称している'に過ぎないように思えますが。
    • good
    • 0

> ? では メソッド と メンバ関数 の違いは?



C/C++では、メソッドは言語仕様にないので一般的な解釈をせざるを得ないと思います。

「標準出力というオブジェクトに、putsというメッセージを送ると、文字列が出力されるというメソッドが実行される」といった具合に、メンバ関数とは直結しません。
もっと極端な例では、「タイマというオブジェクトに、レジスタへの書き込みというメッセージを送ることで、カウントアップ開始というメソッドが(ハード的に)実行される」というのもあるでしょう。

メンバ関数はメソッドを実現する上で便利な機能ではありますが、メンバ関数を使えばメソッドになるわけでもなければ、メソッドはメンバ関数でしか実現できないものではないと思いますが、いかがでしょう?
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q「クラス関数」「メンバ関数」「メソッド」の違いを教えてください。

「クラス関数」「メンバ関数」「メソッド」の違いを教えてください。

あるサイトに、「クラス関数」=「メンバ関数」と書かれていました。
「メンバ関数」=「メソッド」だと思っているのですが、
そうすると、「クラス関数」=「メンバ関数」=「メソッド」という認識で間違いないでしょうか?

Aベストアンサー

Java や C++ の感覚でいうと下記の様になりますでしょうか。

・「メンバ関数」=「メソッド」
  クラスに定義されている関数(プロシージャ)全般。

・「クラス関数」=「クラスメソッド」=「静的メソッド」
  クラスに定義されている関数の内、静的(static)なもの。インスタンス化せずにアクセスできる。
  http://jp2.php.net/manual/ja/language.oop5.static.php

・「インスタンス関数」=「インスタンスメソッド」
  クラスに定義されている関数の内、静的(static)でないもの。インスタンス(オブジェクト)を通してアクセスする。


この分類によれば、「メンバ関数」には「クラス関数」と「インスタンス関数」の2種類が有ることになります。


文脈によっては「クラス内の関数」という意味で「メンバ関数」全般のことを「クラス関数」という場合も有るかも知れません。

参考URL:http://ja.wikipedia.org/wiki/%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89_%28%E8%A8%88%E7%AE%97%E6%A9%9F%E7%A7%91%E5%AD%A6%29

Java や C++ の感覚でいうと下記の様になりますでしょうか。

・「メンバ関数」=「メソッド」
  クラスに定義されている関数(プロシージャ)全般。

・「クラス関数」=「クラスメソッド」=「静的メソッド」
  クラスに定義されている関数の内、静的(static)なもの。インスタンス化せずにアクセスできる。
  http://jp2.php.net/manual/ja/language.oop5.static.php

・「インスタンス関数」=「インスタンスメソッド」
  クラスに定義されている関数の内、静的(static)でないもの。インスタンス(オブジ...続きを読む

QC#にて別クラスの関数を使いたい

C#にて、別クラスの関数を使用する方法を教えてほしいです。

下記のような、構造体を受け取るメソッドを作りました。

*****************************
private struct MyPoint
{
public int x;
public int y;
}

private void proc1(MyPoint pt)
{
MessageBox.Show("座標:" ; pt.x + "," + pt.y + "実行結果");
}

private void button1_Click(object sender ,System.EventArgs e)
{

MyPoint pt;
pt.x = 10;
pt.y = 20;
proc(pt);
}
*****************************

別のフォームのクラスから、proc1を呼び出したいのですが、やり方がわかりません。
どうか、教えてください。

Aベストアンサー

同じ定義をしたとしても別の名前空間に書いた構造体は同一とはみなされません。

呼び出し先クラスでの構造体を private では無く、public で宣言して下さい。

呼び出し元では、

MyClass.MyPoint pt;

のようにして実体を作ります。

Q関数とメソッドって違うものですか?(JAVA)

現在0からJAVAを勉強していますが、関数とメソッドの違いがわかりません。
過去ログにC/C++カテゴリーで同様の質問がありましたが高度なんだか、言語が違うからなのかわかりませんでした。

関数とメソッドってどう区別できるのでしょうか?
(”インスタンス.”の後ろには関数もメソッドも来ることができますよね?)
(かっこも後ろについていますが、あれの意味もわかりません)

Aベストアンサー

 1の方が仰るように、Javaには関数という概念が存在しません。僕も詳しくは知らないですし、あまり正確性も保証できないのですが、PHPを学んだとき、「メソッド」は、クラスのメンバであるものを指しており、「関数」はそうでないものを指すと書いてあったような気がします。
 念のためIT用語辞典を引いてみましたが、メソッドはオブジェクト指向プログラミングで用いられるものであるのは確かなようです。

「関数」
http://e-words.jp/w/E996A2E695B0.html
「メソッド」
http://e-words.jp/w/E383A1E382BDE38383E38389.html

 結論として、インスタンスの後ろに来るのは、メソッドである、という言い方が自然だと思います。(インスタンスの後ろに関数が来る、という言い方が正しくないのか、正しいのかはわかりませんが・・・。)
 そして、2の方の仰るように、関数とメソッドは同一視してかまわないと思います。はっきり言ってこの回答も、よくわからなければスルーしちゃっていいのではないかと。(笑)

 あと、関数やメソッドの後ろについているカッコは、また別の話です。関数やメソッドは、例えば、
instance.method1("引数");
のように、「引数」という、目的語のようなものを取る場合があります。この引数を取らないメソッドは、
instance.method2();
のようになるのです。
 ちなみに、たぶんこちらはスルーしちゃまずいです。

 1の方が仰るように、Javaには関数という概念が存在しません。僕も詳しくは知らないですし、あまり正確性も保証できないのですが、PHPを学んだとき、「メソッド」は、クラスのメンバであるものを指しており、「関数」はそうでないものを指すと書いてあったような気がします。
 念のためIT用語辞典を引いてみましたが、メソッドはオブジェクト指向プログラミングで用いられるものであるのは確かなようです。

「関数」
http://e-words.jp/w/E996A2E695B0.html
「メソッド」
http://e-words.jp/w/E383A1E382...続きを読む

QLNK2019: 未解決の外部シンボルのエラーが出る

Microsoft Visual Studio 2008
Version 9.0.21022.8 RTM
Microsoft .NET Framework
Version 3.5 SP1
----------------------------------------------------------------
新しいプリジェクト→Win32 コンソール アプリケーション(ソリューションのディレクトリを作成 チェック外す)→Windows アプリケーション(空のプロジェクト チェック外す)
----------------------------------------------------------------
 プログラム

 mymain.cpp
#include "myhelper.h"
#include "mymain.h"

//自キャラのデータ
Point2D g_jikipos = {40, 400};//自キャラの座標

//画像ハンドル
int g_jikiimage[11];

//色々なファイルの読み込み
int LoadFiles(){
//画像ファイル読み込み
if(LoadDivGraph("media\\player01.bmp",
11,11,1,64,64,g_jikiimage) == -1) return -1;

return 1;
}


 mymain.h
//他から呼び出させるMyMainの関数
void MyMain();
int LoadFiles();


 myhelper.h(サンプルなので打ちミスはない)
#include "DxLib.h"
#include <limits.h>
#include <math.h>

//構造体宣言
//座標またはベクトルを記録する構造体
struct Vector{
float x,y;
};
typedef Vector Point2D;
//線を記録する構造体
struct Line2D{
Point2D startpos, endpos;
float katamuki;//傾きをラジアン値で記録
Vector speed;//移動している場合は速度をセット
};
//球体を記録する構造体
struct Ball2D{
Point2D position;
float hankei;//半径
};
//四角形を記録する構造体
struct Rect2D{
Point2D lefttop;
Point2D rightbottom;
float width;
float height;
};


//ライブラリ関数
Point2D PosInView(Point2D in);
int XInView(float inx);
int YInView(float iny);
void ScrollToLeft(float jikiposx);
void ScrollToRight(float jikiposx);
void ScrollToUp(float jikiposy);
void ScrollToDown(float jikiposy);
void DrawLineInView(float x1, float y1, float x2, float y2, int Color, int Thickness);
void DrawCircleInView(float x, float y, float r, int Color, int FillFlag);
void DrawAnimation(float x, float y, double ExtRate, double Angle,int TurnFlag,
int *imgarray, int allframe, float fps);
//ベクトル関数
Vector CreateVector(Vector in, float veclen);
Vector AddVector(Vector v1, Vector v2);
Vector SubVector(Vector v1, Vector v2);
Vector AddVectorInFrameTime(Vector pos, Vector speed);
Vector AddVectorInFrameTime2(Vector pos, Vector speed, Vector accel);
Vector Normalize(Vector in);
Vector RotateVector(Vector in, float radian);
float VectorLengthSquare(Vector in);
float DotProduct(Vector v1, Vector v2);
float CrossProduct(Vector v1, Vector v2);
void SetLine2DKatamuki(Line2D *in);
void DrawLine2D(Line2D in, int Color, int Thickness);
void DrawBall2D(Ball2D in, int Color, int Fill);
//当たり判定関数
bool HitTestLineAndBall(Line2D linein, Ball2D ballin);
bool IsPointAtLineFace(Line2D linein, Point2D ptin);
bool HitTestLineAndLine(Line2D line1, Line2D line2);
bool HitTestBallAndBall(Ball2D a, Ball2D b);
bool HitTestPointAndBox(Rect2D rect, Point2D pt);
//タイマー関数
void SetSimpleTimer(int idx, int time);
int GetPassedTime(int idx);


//グローバル変数
extern float g_frametime;
extern Rect2D g_framerect;//画面領域(当たり判定)
extern Point2D g_current_field_pos;//現在の左上座標
extern Rect2D g_stagesize;//ステージサイズ

//定数宣言
const float ZEROVALUE = 1e-10f;
const float PIE = 3.1415926f;
const int SCROLL_LIMIT = 200;
----------------------------------------------------------------
 エラー内容
1>myhelper.obj : error LNK2019: 未解決の外部シンボル "void __cdecl MyMain(void)" (?MyMain@@YAXXZ) が関数 _WinMain@16 で参照されました
1>C:\Documents and Settings\Owner\My Documents\Visual Studio 2008\Projects\my\Debug\my.exe : fatal error LNK1120: 外部参照 1 が未解決です
1>my - エラー 2、警告 0
ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ
----------------------------------------------------------------
画像を貼り付けときます
(見えにくい場合→http://www.dotup.org/uploda/www.dotup.org154142.jpg.html)
初心者なのでわかりやすくお願いします

Microsoft Visual Studio 2008
Version 9.0.21022.8 RTM
Microsoft .NET Framework
Version 3.5 SP1
----------------------------------------------------------------
新しいプリジェクト→Win32 コンソール アプリケーション(ソリューションのディレクトリを作成 チェック外す)→Windows アプリケーション(空のプロジェクト チェック外す)
----------------------------------------------------------------
 プログラム

 mymain.cpp
#include "myhelper.h"
#include "mymain.h"

//自...続きを読む

Aベストアンサー

ファイル構成から推測するに
mymain.cpp というファイルに
void MyMain(void) {
// ここに処理を書く
}
という関数が必要なようです。

Qint型からchar型への変換

タイトル通り、int型からchar型への変換の仕方がわかりません!><
どうしたらいいのでしょうか?

Aベストアンサー

#include <stdio.h>


char buf[5];
int no;

no = 10;
sprintf(buf, "%d", no);

Qクラス、オブジェクト、インスタンス、メソッドについて。

クラス、オブジェクト、インスタンス、メソッドに
ついて教えていただけないでしょうか?

今現在の自分の認識では、乗り物を例にすると、
「乗り物」という大枠がクラス。それを、たとえば
飛行機なり電車なり船なり、より具体的にした
ものがインスタンス=オブジェクト。
その具体化したものの挙動、動作(走るとか飛ぶとか)
がメソッド、という理解です。

ただ、これだとオブジェクトとインスタンスを
同じものとして見てしまっているので、この2つの
違いを明確に説明しろと言われると困ってしまいます。

インスタンスとオブジェクトの違いを明確にした上で
うまく伝えられる方法があれば、ご教授ください。

Aベストアンサー

最初は「オブジェクト=インスタンス」で良いと思います。

ただ、いろいろと細かい話が出てきていますので、私の理解している範囲でアドバイスしたいと思います。

〔オブジェクト〕
設計段階で使う用語です。
クラスオブジェクトとインスタンスオブジェクトの2種類あり、通常単にオブジェクトと言えばインスタンスオブジェクトのことを指すようですが、クラスオブジェクトのことを指すこともあるので注意が必要です。

〔クラス〕
実装段階で使う用語です。
クラスオブジェクトの実装が「クラス」です。
クラスオブジェクトとクラスは完全に一致します。

〔インスタンス〕
実装段階で使う用語です。
インスタンスオブジェクトの実装が「インスタンス」です。
インスタンスオブジェクトとインスタンスは、必ずしも一致しません。
たとえば、C++ であるクラスのインスタンスを new して、ポインタ変数に代入した場合を考えてみます。
インスタンスオブジェクトに相当するのは、そのポインタ変数そのものですよね。
しかし、インスタンスはポインタ変数が指している先、つまりメモリ領域に確保された実体そのものです。

と、まあ、細かいことを言えば、こんな話になりますが、ここまでこだわって話をすることは、まずないでしょう。

設計レベルでは「オブジェクト」、実装レベルでは「インスタンス」と使い分けておけば、とりあえず間違いはないでしょうし、両者を混同したところで話が通じないことはないと思います。

# 私なんか、最初「インスタンスはオブジェクトのちょっとかっこいい
# 呼び方だ(?)」などと思っていましたし。。。
# いや、なんとなく響きがかっこよく聞こえたもので。。。

とりあえずは、こんな感じでいかがでしょうか。

最初は「オブジェクト=インスタンス」で良いと思います。

ただ、いろいろと細かい話が出てきていますので、私の理解している範囲でアドバイスしたいと思います。

〔オブジェクト〕
設計段階で使う用語です。
クラスオブジェクトとインスタンスオブジェクトの2種類あり、通常単にオブジェクトと言えばインスタンスオブジェクトのことを指すようですが、クラスオブジェクトのことを指すこともあるので注意が必要です。

〔クラス〕
実装段階で使う用語です。
クラスオブジェクトの実装が「クラス」です...続きを読む

Q戻り値の意味がわかりません…

戻り値とはどういう値なのか簡単な例文で教えて頂けますか?

Aベストアンサー

バカくさいかもしれませんが簡単な例えをだしてみます。
2人の子供がいて、名前をそれぞれ太郎・花子にしましょう。この2人の子にある役割を決めます。
・花子は飴をもらうと、それをチョコにする役割。(できるかは別として)
・太郎は花子を呼んで飴をあげる役割。

さてこの例では太郎の飴が引数(ひきすう)になり
花子のチョコが戻り値になります。

このイメージを元に次の文を読んでみてください。

「プログラム中の関数やサブルーチンが処理を終了し
呼び出し元に処理の結果として返す値。」

これが戻り値の正しい定義です。
そのほかにはNo1さんのような役割指すときも、それを「戻り値」と呼んだりします。

QC#「オブジェクト参照が必要です」(初心者)

Visual C# 2008を学習中なんですが、とりあえず何か作ってみようと思って、パラパラマンガに挑戦してみました。
Form1にpictureBox1を作り、waitを入れてイメージを書き換えるという単純なものです。
ところが実行しようと思ったら、「静的でないフィールド、メソッド、またはプロパティ’WindowsFormApplication1.Form1.pictureBox1’でオブジェクト参照が必要です」というエラーが出ます。その際のフォーカスは、main()内の
Form1.pictureBox1.image = Image.FromFile("motion1.png");
”Form1.pictureBox1”に当てられています。

何が原因と考えられるでしょうか。
もし情報不足であればご指摘いただくか、あるいはこの目的においてやらなければいけないこと、を大雑把に教えていただくだけでも幸いです。
よろしくお願いします。

Aベストアンサー

main()内に記述されているとのことですので、たぶん、
Form1.pictureBox1.Image=Image.FromFile("motion1.png");
Application.Run(new Form1());
と書いているのではないでしょうか?

連載 改訂版 C#入門 第3章 クラスとインスタンス
http://www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_003/cs2_003_01.html#cs0302

ここであるように、オブジェクト指向にはクラスとインスタンスという概念があります。
今のコードでは、Form1クラスを操作しようとしているのでそのようなエラーが出ます。

具体的な解決方法としては、PictureBoxに初期画像を設定する処理をForm1のコンストラクタでやるのがいいと思います。
その際、redfox63さんがおっしゃられるように
this.pictureBox1
と記述することが必要です。(thisは自分自身のインスタンスを指します)

後は、Windowsフォームで一定間隔での処理をするための「Timerコンポーネント」について調べてみたらいいと思います。

タイマにより一定時間間隔で処理を行うには?(Windowsタイマ編)
http://www.atmarkit.co.jp/fdotnet/dotnettips/372formstimer/formstimer.html

MSDNライブラリ Timerクラス
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.timer.aspx

参考URL:http://www.atmarkit.co.jp/fdotnet/csharp_abc2/index/

main()内に記述されているとのことですので、たぶん、
Form1.pictureBox1.Image=Image.FromFile("motion1.png");
Application.Run(new Form1());
と書いているのではないでしょうか?

連載 改訂版 C#入門 第3章 クラスとインスタンス
http://www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_003/cs2_003_01.html#cs0302

ここであるように、オブジェクト指向にはクラスとインスタンスという概念があります。
今のコードでは、Form1クラスを操作しようとしているのでそのようなエラーが出ます。

具...続きを読む

QC++とVC++の違いについて

この質問をご覧頂きありがとうございます。

みなさんに2つ、お聞きしたいことがあり、質問させていただきます。
1.C++とVC++とでは、どのくらいの違い(どういう違い、特徴)があるのでしょうか?

2.また、これからC++/VC++でプログラミングを始めようとした場合、
C++からVC++へと段階を踏んで勉強した方がよいのでしょうか?

一応、私のプログラミングの履歴としては、
言語としてVisual Basicは多少勉強はしておりました。
また、オブジェクト指向の基礎程度(多相、継承、カプセル化)は理解しています。

抽象的な質問で大変恐縮なのですが、
みなさんの経験論や、ご参考にした本、HP等がありましたら、
ご教授いただければと思います。

Aベストアンサー

こんにちは、honiyonです。
 VC++ は、Microsoftの発売している C++開発環境です。 純正C++に加え、独自に機能(という言い方でいいのかな?)を追加しており、更に開発しやすいソフト(環境)を添付してあります。

 VC++に限らず、大体はそうです。 ProC++も、Borland C++も皆そうです。
 今までお使いになっていた VBも、BASICコンパイラ+開発環境です。 
 こちらの場合、BASICに機能を追加・・・というより仕様そのものを大幅いじってますね(笑)

 VC++をただ単純に C++として使用するなら良いですが、VC++とMFCを使用してウインドウアプリケーションを作りたいという事であれば、死に物狂いな勉強が必要が必要かもしれません。Windowアプリケーションの処理プロセスを理解していないと、とっても難解に感じると思います。
 VC++でなければいや!という理由がなく、Visual Basicからスムーズに移行でき、かつVisual Basicより奥の深い事をしたい、というならば C++ Builder をお勧めします。 こちらで腕を慣らし、徐々にWindowアプリケーションの処理プロセス(WinMainから始まるプログラムの組み方の事です)を学ぶと良いかな、と思います。 その上で VC++&MFCな環境に移行すると、敷居はぐっと低くなります。
 私は一度VC++&MFCに挫折しましたが、こちらの方法で何とか理解する事が出来ました(^^;

 参考になれば幸いです(..
 

こんにちは、honiyonです。
 VC++ は、Microsoftの発売している C++開発環境です。 純正C++に加え、独自に機能(という言い方でいいのかな?)を追加しており、更に開発しやすいソフト(環境)を添付してあります。

 VC++に限らず、大体はそうです。 ProC++も、Borland C++も皆そうです。
 今までお使いになっていた VBも、BASICコンパイラ+開発環境です。 
 こちらの場合、BASICに機能を追加・・・というより仕様そのものを大幅いじってますね(笑)

 VC++をただ単純に C++として使用するなら良いで...続きを読む

Qファイルやディレクトリの存在確認を行う方法

ファイルをオープンするのはfopenでOKですが、ファイルやディレクトリの存在確認を行う方法が知りたいです。

何か組み合わせて作るものなのでしょうか?
perlとか便利な演算子があるのですが、C/C++って器用ではないですね。
これは処理系?依存の内容ですか?

私の環境は VC6, VC2005 Windows2000です。

Aベストアンサー

int access(const char* path, int mode);
int stat(const char* path, struct stat* sb);

かな?
MSDN を引くと _access_s() を使えとか書いてあるけど。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報