位置情報で子どもの居場所をお知らせ

これから新しい言語として、C#もしくはC++の勉強をしたいと
考えています。

C#にできてC++にできないこと、あるいはその逆でC++にはできて
C#ではできない。ということがあれば、教えていただけないでしょうか?

感覚としてはC++であれば何でもできるという感じではあるのですが、
C#を使うメリットってどんなことがありますか?
やはり、ビジュアル開発(コントロールのDrag&Dropで画面開発ができる)
の簡単さというところがC#でのメリットでしょうか?

ちなみに私はこれまで、C -> VB -> Java といった順で言語を習得
してきました。

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

A 回答 (5件)

>C#にできてC++にできないこと


無いでしょう。
基本的にC/C++の場合コンパイラの種類に依りますが
内部にアセンブラを書くこともできますから
C/C++で出来ないことはC#でも出来ません。
(勿論#1さんの言われるように言語レベルの仕様で出来ない事はあります。)

簡単さでいうとC#です。VB6の開発経験があるとのことですが
VC#だとVBのフォームを作成するような感じでインターフェースを
作っていけます。(一応VC++でも可能)

一方C#で出来ないことですが
当然ですがフレームワークに依存しないソフトを作る事が出来ません。
Javaで作ったソフトがJREを必要とするのと同じです。
他にはCPUの特殊な命令(SSEやMMX)を呼び出すとかドライバの開発等も出来ません。

ちなみにVC++でもフレームワークは使えるので
フレームワークのガベージコレクション等を使うことは可能です。
(ただフレームワークを使うならC#の方が簡単です。)
    • good
    • 1

C++にはできてC#ではできない


→やはりC++の資産をそのまま活用できるというのが大きいでしょうか。特にそのような場面に出くわしていないのでしたら、VB,Javaといった今までの道のりから考えて、次はC#かとは思います。
またC++は、未だVC6.0が開発環境として広く使われていますが、今更MFC6.0を学んでも、努力に見合うメリットはないと思います。
    • good
    • 0

何を作るかを決め手から、言語を選べはいいのです。

一つの言語で何でもやろうして遠回りすることのないように、あらゆる言語、ライブラリを使えるようにしておいた方が良いと思います。(深く知る必要はありません。調べながらコードが書ける程度の知識で十分です。)


C# or C++ のお勉強をするなら、C++ & STL のお勉強をお勧めします。分かりやすい本が山ほど出てますし、ネット上にも情報は転がってます。Win32API, MFC, .Net, ATL については、Visual Studio.Net 2005 を待ったほうがいいかもしれません。(Windows OS は現在過渡期なんで・・・。)

Visual Studio.Net をまだお持ちで無いなら、しばらくは、お試し版で試してからの方がいいですね。Visual Studio.Net 2005 が買いです。
    • good
    • 0

C# の次の仕様ではジェネリック (C++ でいうテンプレート) が導入される (同時に CLI も拡張される) んですが....


C# のジェネリックは CLI に強く依存するため, C++ でのテンプレートの特殊化が C# ではできません.
    • good
    • 2

・C#にできてC++にできないこと


言語構造としてプロパティ
自動メモリ管理
javaでいうインターフェースのようなものとかデリゲート

・C++にできてC#ではできないこと
クラスの多重継承
テンプレートクラス

とりあえず思いつくところを書いてみました。
(間違っていたら識者の方訂正お願いします)
いずれにせよ、代替機能でなんとかなるようなものもあるし、
C#やC++も言語拡張(例えばマネージドC++とか)したものや将来的にされるものがあるのであんまり意味はないのかもしれません。
    • good
    • 1

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

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

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

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

QC#.NETでできること?

こんにちは。仕事でPGをはじめて9ヶ月目のかけだしです。今度C#.NETでPGをすることになり、勉強をしているのですが、画面も使い方もVB.NETと同じです。C#.NETでしかできないことって(メリット)ってなんなのでしょうか(??)

Aベストアンサー

No1・2でおっしゃっているように機能上の違いはほとんどありません。
ではなぜ VB.NET とC#.NET があるのかというと、それまでずっとVBでプログラミングをしていた技術者と、Javaでプログラミングをしていた技術者の双方をターゲットにするためです。

質問者様の環境で言えば、C#.NETで開発する利点は、C#を使ってほしいというお客様の要望をかなえられることでしょう。
それとVBよりC#のほうがすっきりした文法ですので、いうなれば「今風の」プログラムになることです。

QVBとVBAの違い

お世話になります。

現在、ExcelVBAで機械設計の計算をさせようと思い勉強しているのですが、VBとVBAの違い(VBと比較したとき、VBAできること、できない事)の境目?がいまいち判りません。
まだまだ勉強中で困惑しております。このままExcelVBAを勉強していく物か、VBについて勉強していくか迷っています。このままExcelVBAを勉強してExcelVBAを理解すれば判断できるかと思うのですが、畑違いの勉強になってしまわないかと心配です。

やりたいことは、各種計算の簡略化です。
現在は、関数電卓で行っていますが、これをパラメータを入力すると計算結果が出る。このような物を作りたいと思っています。

長くなってしまったのでまとめると、
1、VBAとVBの違い
2、ExcelVBAで設計計算が可能か
あと、
プログラムにより計算させるときに、最適なプログラム(JavaとかPHPとかHTML等など・・・)お勧めのプログラムがありましたらアドバイス頂けたらと思います。

Aベストアンサー

1. VBAとVBの違い

VBは単体で動作するアプリケーションが作れますが、VBAはOfficeが必要です。
また、VBAはOfficeの環境が使えるので、Excel等を使った入出力の機能が既にできていますが、VBではある程度自分で作る必要があります。また、費用的な面でVBは購入しないと使えませんが、VBAはOfficeがあれば使えますので、既にExcelなどを導入されているならば、追加の費用が必要ありません。
もし、複数の人間で作ったプログラムを利用され、かつその中にOfficeを持っていない人が含まれるのであればVBAではできませんので、VBが必要です。

2. ExcelVBAで設計計算が可能か

可能です。また、多分VBAを使わなくてもExcelの関数でもある程度のことが可能だと思われます。お持ちの関数電卓の桁数にもよりますが、相当な高精度が必要でない限り大丈夫です。

文面からすると、プログラミング未経験のようですが、やりたいことが明確なので、Excelをお持ちであればVBAで始めてみてはいかがでしょうか。他の言語(Java, C, PHP...)でも可能でしょうが、中には環境を用意しなくてはならなかったり、本質である計算以外に気にしなくてはならないことが多く、初心者にはとっつきづらいのではないかと考えます。

VBAからVBへの移行、VBからVBAへの移行はどちらも可能ですし、VBAからVBへの移行は多少時間がかかるかもしれませんが、VBよりVBAから始める方が楽なので、どちらに優越があるとは一概に言えないと思います。一人でちょっと使う程度や勉強用なら、ExcelVBAをお勧めします。
しばらくすると、ExcelVBAの限界を感じるようになると思うので、そこからVBに移行するというのでも悪くないと思います。

1. VBAとVBの違い

VBは単体で動作するアプリケーションが作れますが、VBAはOfficeが必要です。
また、VBAはOfficeの環境が使えるので、Excel等を使った入出力の機能が既にできていますが、VBではある程度自分で作る必要があります。また、費用的な面でVBは購入しないと使えませんが、VBAはOfficeがあれば使えますので、既にExcelなどを導入されているならば、追加の費用が必要ありません。
もし、複数の人間で作ったプログラムを利用され、かつその中にOfficeを持っていない人が含まれるのであればVBAではで...続きを読む

QDWORDの実際の型は何でしょうか

VC++.NETの環境です。
DOWRD dw1 = 1;
int i = 2; と定義し
ここで
if ( i > dw1 ){
何かの処理;
}
とコーディングすると
warning C4018: '>' : signed と unsigned の数値を比較しようとしました。
のワーニングがでます。
これは、DWORDがint型でなくunsigned int型のようにも見えます。
ある本によれば(VC++.V.NET逆引き大全500の極意)
DWORD はint型であると記述されています。
もし、int型ならこのワーニングはでないはずなのですが、
なぜでるのでしょうか。又、DWORDの実際の型は何なのでしょうか。ご存じのかたおりましたら、教えていただけませんでしょうか。

Aベストアンサー

型定義が知りたいのならば、宣言ファイルを見れば疑問を挟む余地もありません。
DWORD型はwindef.hで
"typedef unsigned long DWORD;"
と宣言されています。

Visual Studioを使っているのならば、知りたい型の上にマウスポインタを置いて右クリック、ポップアップメニューの「定義へ移動」または「宣言へ移動」で簡単に知ることが出来ます。

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クラスを操作しようとしているのでそのようなエラーが出ます。

具...続きを読む

QCreateProcessでの実行ファイルの操作について

VC++ 6.0 Win98

カレントディレクトリに実行ファイルをいれておいて、szCommand[]="eee"とすると(eeeは実行ファイルです。)実行してくれるのですが、相対パスや絶対パスを使うと実行をしてくれません。
CreateProcessでは、相対パスや絶対パスは使えないのでしょうか?
ちなみにコマンドラインから直接(相対パスや絶対パスを使用して)に打つと実行ファイルが動作します。

あと、リダイレクトも使えないのでしょうか?(動作しなかったので・・)

STARTUPINFO si;
ZeroMemory(&si,sizeof(STARTUPINFO));
si.cb=sizeof(STARTUPINFO);
si.dwFlags=STARTF_USESTDHANDLES;
si.hStdOutput=hFile;
si.hStdError=hFile;
char szCommand[]= "C:\\\"My Documents\"\\nannka\\VC++\\Ten3\\eee";

PROCESS_INFORMATION pi;
CreateProcess(
NULL,
szCommand,//コマンド
//NULL,
NULL,NULL,
TRUE, 0,
NULL,NULL,
&si,&pi
);


よろしくお願いします。

VC++ 6.0 Win98

カレントディレクトリに実行ファイルをいれておいて、szCommand[]="eee"とすると(eeeは実行ファイルです。)実行してくれるのですが、相対パスや絶対パスを使うと実行をしてくれません。
CreateProcessでは、相対パスや絶対パスは使えないのでしょうか?
ちなみにコマンドラインから直接(相対パスや絶対パスを使用して)に打つと実行ファイルが動作します。

あと、リダイレクトも使えないのでしょうか?(動作しなかったので・・)

STARTUPINFO si;
ZeroMemory(&si,sizeof(STARTUPINFO));
...続きを読む

Aベストアンサー

> もし、お時間がありましたら部分的に囲み方法ではダメなのか教えてもらえないでしょうか?

「*何故* ダメなのか?」ってこと?

想像でしかないですが、解釈する人が違うから、としか言いようが無いですね。

コマンドラインからの場合は、cmd.exe (もしくは Shell) が解釈している。CreateProcess の場合には違う人が解釈している、と。

QVC++とVC++.NETその違いと最初に始めるならどっち?

学校でC言語の授業がスタートします。
別の言語のプログラムなら結構やりましたがC並びにVBは初めて(結構ワクワクしてます)

そして、この授業受ける人にVS6.0が教材として配布されたのですが(すでに家の部屋の片隅にありました(^^;)

他に必要な機材あるとの事でパソコン屋さんにいったついでに例のソフトあるのか見に言ってみました。
そしたらVS6.0がないΣ(゜Д゜;)
そのかわり、VS.NETがありました。「.NET?」首をかしげて店員さんに聞きます「.NETってなんですか?」でも「ちょっとそこまでは…」と首かしげて冷や汗だしてました。(当たり前ですよね)

じゃぁ「.NET」ってなぁにとなりますよね。うーんいったいなんだろう?何もしらない私はもちろんわかりません。

でも、「最新版だからいいのは確かだよね^^;」と思います。学校ではVS6.0使いますが、私は他の友達よりいい作品をたくさん家でつくって「エッヘン<( ̄^ ̄)>」となりたいです。(これは技術の向上にも役立ち一石二鳥ですからね。)

じゃあ質問です。

・VC++(又はVS6.0)とVC++.NET(又はVS.NET)その違いはなぁに?

・最初からVC++.NET(又はVS.NET)で初めていいのですか?

非常に悩む部分です。もうすぐC言語の授業があじまります。また授業で習ったことを生かして自分の趣味とお友達作りにも役立てたいなぁと思ってます。

どうか相談おねがいします。

学校でC言語の授業がスタートします。
別の言語のプログラムなら結構やりましたがC並びにVBは初めて(結構ワクワクしてます)

そして、この授業受ける人にVS6.0が教材として配布されたのですが(すでに家の部屋の片隅にありました(^^;)

他に必要な機材あるとの事でパソコン屋さんにいったついでに例のソフトあるのか見に言ってみました。
そしたらVS6.0がないΣ(゜Д゜;)
そのかわり、VS.NETがありました。「.NET?」首をかしげて店員さんに聞きます「.NETってなんですか?」でも「ちょっとそこま...続きを読む

Aベストアンサー

そもそもVS6はとっくの昔に販売終了しています。
新規購入なら自動的に.NETとなります。

#> この授業受ける人にVS6.0が教材として配布されたのですが
# いいのかそんなことして? > せんせえ


問題ありません。少なくとも数年前までは、学校にはこういったライセンス形態がありました。


それとVisual Studio 2003ってそんなに高いですか?
学生専用版は確かアマゾンで3800円でしたが。プログラムをするなら、あれはどう見ても買い得だと思います。

参考URL:http://www.amazon.co.jp/exec/obidos/ASIN/B0002ERS18/249-3944748-4369905

Qコンボボックスでデフォルト値の設定

コンボボックスのデフォルト値を設定しようとして
以下のコードを書いたのですが、コンパイルがとおり
ません。どうしたらよいでしょうか?

private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) {
//費目初期値
array<System::String^>^himokudata = {
"通信費","光熱費","住居費"
};

for (int i=0; i < himokudata->Length; i++) {
comboBox1->Items->Add(himokudata[i]);
}

comboBox1->Text = comboBox1->Items->default;
<---ここが通らない。textに表示されるデフォルト
値として通信費を入れたいのだが
}

Aベストアンサー

comboBox1->SelectedIndex = 0;

QDataGridViewの、選択されている行を取り出したい

いつもお世話になっております。

DataGridViewに関して、選択されているレコードをDataRow型で別フォームに渡してから、各項目をテキストボックスに表示したいのですがうまくいきません(DataRow型にこだわっているわけではないのですが、レコード1件丸ごと取得する型を他に知らないので例として挙げました)。

DataGridViewのCurrentRowプロパティや、SelectedRows(0)をDataRow型に代入する試みをしましたが、型変換できませんでした。

DataGridViewで選択されているレコード一件まるごと変数に渡す方法というのはあるのでしょうか?

ちなみに、SelectionModeはSelectFullRowに、MultiSelectはFalseにしてあります。

ご存知の方ご教授いただけると助かります。
よろしくお願いします。

Aベストアンサー

>おっしゃるとおりやってみたのですが、どうもやはり型変換ができませんでした。
>参照しているのはDataTable型なわけですから、DataRowも取り出せそうな気はするのですが。。。

えー・・・スイマセン
今度はコーディングして確認してみたところ、
なにやら、1ステップすっ飛ばしていました

下記の手順にて取得可能です

[C#]
System.Windows.Forms.DataGridViewRow dgr = this.DataGridView1.CurrentRow;
System.Data.DataRowView drv = (System.Data.DataRowView)dgr.DataBoundItem;
System.Data.DataRow dr = (System.Data.DataRow)drv.Row;

[VB2005]
Dim dgr As System.Windows.Forms.DataGridViewRow = Me.DataGridView1.CurrentRow
Dim drv As System.Data.DataRowView = CType(dgr.DataBoundItem, System.Data.DataRowView)
Dim dr As System.Data.DataRow = CType(drv.Row, System.Data.DataRow)

※最後のキャストを変更すれば、型付データセットにも対応可能のはずです

>おっしゃるとおりやってみたのですが、どうもやはり型変換ができませんでした。
>参照しているのはDataTable型なわけですから、DataRowも取り出せそうな気はするのですが。。。

えー・・・スイマセン
今度はコーディングして確認してみたところ、
なにやら、1ステップすっ飛ばしていました

下記の手順にて取得可能です

[C#]
System.Windows.Forms.DataGridViewRow dgr = this.DataGridView1.CurrentRow;
System.Data.DataRowView drv = (System.Data.DataRowView)dgr.DataBoundItem;
System.Data...続きを読む

QC、C++、C#の関係について

現在C#で簡単な開発しています。

今度就く業務ではC++が必要だから、勉強しておくようにと言われました。
C#を使っていながら、恥ずかしい質問なのですが・・・

 ・よく聞く「VC++」と「C++.Net」は、違うのでしょうか?
  正式名称が「Microsoft Visual C++ .Net」なので、同じような気がするのですが。
  私の使用PCには「Microsoft Visual Studio .Net 2003」が入っています。

 ・C言語とC++との違いは何なのでしょうか?
  両者の関係が分かりません。
  C++を勉強する場合、C言語というのは飛ばしてよいのでしょうか?
  C#を習得するときは、C言語を勉強しませんでした。
  C++で開発とか、C#で開発とか言いますが、「C言語で開発」とは言わないですよね?

C#とC++がどれほど違うのかが不安です。
質問がたくさんになってしまいましたが、よろしくお願いいたします。

Aベストアンサー

 ・よく聞く「VC++」と「C++.Net」は、違うのでしょうか?

文脈により違うものをさす可能性もあります。(同じ可能性もありますが、大抵は違うかも…)

「VC++」は、Microsoft社のC++コンパイラ製品名(の略称)であって、言語ではないです。
但し、特にMFCでの開発をさして(C++と区別して)「VC++」と表現する方もいます。

そして、「VC++」は、「非.NET platformのC++(標準C++)」と、
.NET platform用のManaged C++(MSの独自拡張。後に整理されてC++/CLIとして規格化)の*両方に*対応してます。

C++.NETというと、恐らくはManaged C++(MS独自拡張)か、
C++/CLI(これはECMAで独立した言語として標準化)をさすと思われます。
# Managed C++とC++/CLIも微妙に違う言語です。

一報、単にVC++と言う場合、標準C++(+MFC)の可能性が高いです。


> 私の使用PCには「Microsoft Visual Studio .Net 2003」が入っています。

これは、.NET framework上のManaged C++と標準C++の両方に対応した製品です。

 ・C言語とC++との違いは何なのでしょうか?

C言語は、ISO/IEC9899で標準化された言語です。
C++は、C言語をベースに開発された別の言語です(ISO/IEC14882)。
そして、.NET framework用のC++/CLI (ECMA-372)も別の言語です。

CとC++の関係を例えるなら、ラテン語と英語とかみたいなものでしょうか。
(ベースでもあり、参考にはなるが、似て非なるもの)

> C++を勉強する場合、C言語というのは飛ばしてよいのでしょうか?

知っているとお得です。知らないと将来「はまる」可能性もあります。
ですが、最初に勉強するべきかといわれると、議論が分かれるところだと思います。

> C++で開発とか、C#で開発とか言いますが、「C言語で開発」とは言わないですよね?

「C言語で開発」とも言います。
(PCアプリだと「C言語+Win32」ということが少ないだけで、組込業界等に行くと普通にあります。別言語ですし、C言語のシェアも高いので)

> C#とC++がどれほど違うのかが不安です。

根本のOOPとかは共通ですが、C++の方が格段に複雑で難易度が高いです。
C++⇒C#は比較的容易ですが、逆は結構面倒だと思います。

C#がオートマ車の運転なら、C++はF1カーのようなもの。
クラッチの切り方から注意しないとエンストしたり、事故ります。
その代わり極めれば性能が出ます。(反面、極めるのは困難です)

 ・よく聞く「VC++」と「C++.Net」は、違うのでしょうか?

文脈により違うものをさす可能性もあります。(同じ可能性もありますが、大抵は違うかも…)

「VC++」は、Microsoft社のC++コンパイラ製品名(の略称)であって、言語ではないです。
但し、特にMFCでの開発をさして(C++と区別して)「VC++」と表現する方もいます。

そして、「VC++」は、「非.NET platformのC++(標準C++)」と、
.NET platform用のManaged C++(MSの独自拡張。後に整理されてC++/CLIとして規格化)の*両方に*対応してます。

C++.NET...続きを読む

QJavaでポインタ的なことはできるか?

JavaでC言語のようにポインタを使おうとしたらJavaには
ポインタが表面上はサポートされていないことを知りました。

関数を呼び出した際に、呼び出し元の変数に影響を与えるようなプログラムは
Javaで作れるのでしょうか?
例えば、以下のプログラムはCで関数を呼び出した際に呼び出し元の
変数の中身を関数内で書き換えてしまうプログラムです。
こういうことをJavaでするにはどう書けばよいのでしょうか?
もしこういうことができないのであれば、Javaにはポインタに代わるやりかたがあるのでしょうか?

実行結果:
1 10

#include <stdio.h>

void func( int *n ){
  *n = 10;
}

int main(){
  int n = 1;
  printf("%d ", n );
  func( &n );
  printf("%d ", n );
}

Aベストアンサー

質問のコードを書き直すと
private void func(Integer n){
  n = 10;
}

public static void main(String[] args){
  Integer n = 1;
  System.out.printf("%d ", n );
  func( n );
  System.out.printf("%d ", n );
}

Javaのプリミティブ型にはそれぞれをラップした型があります。
int Integer
long Long
short Short
double Double
float Float
byte Byte
char Character
boolean Boolean


人気Q&Aランキング