【初心者歓迎】C/C++室 Ver.103【環境依存OK】

■ このスレッドは過去ログ倉庫に格納されています
2018/07/01(日) 03:44:53.53ID:4MMF8cDN
エスケープシーケンスやWin32APIなどの環境依存なものもOK
そのような質問は必ず環境を書きましょう
半角空白やタブでのインデントはスレに貼ると無くなります

コードを貼れる所
http://codepad.org/
https://ideone.com/

前スレ
【初心者歓迎】C/C++室 Ver.102【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1509780815/
2018/07/26(木) 22:56:12.25ID:JayUwZyZ
>>93
ありがとうございます
その手順で何回かやってましたが何も起こらずです;
砂時計が少し出てたので何かを読み込もうとしてる感じはありましたが・・・

今からインストールからやり直すのですが
ワークロード、個別のコンポーネントの項目でどれを選べばいいか教えてほしいです
用途はC++の入門書に書いてあるコードを実行です
https://gyazo.com/48057912d8ac21da300faaf6362919e4
2018/07/27(金) 00:15:04.17ID:Tjy3NERo
新規作成の空プロジェクト以外は何か出るの?
何も出ないって何かおかしいからイベントログ見てみるとか
96デフォルトの名無しさん
垢版 |
2018/07/27(金) 00:40:23.04ID:VvnzXBkW
とりあえず
ユニバーサルWindowsプラットフォーム開発
C++によるデスクトップ開発
Visualstudio拡張機能の追加

この3つを選択してインストールしてるんですが他にも選ばなきゃいけないものがあるんでしょうか
2018/07/27(金) 02:29:41.53ID:VvnzXBkW
>>95
https://gyazo.com/7cd6a220d3e234cb796a87425c8b1b68
コンソール
デスクトップ

この3つですね
何かダウンロードし忘れてますかね・・・
2018/07/27(金) 04:41:40.30ID:VvnzXBkW
プロジェクトからCppを選んだらを選んだら
source.cppの真っ白画面出てきましたがやりかたあってるのかな…?
一応自己解決です
2018/07/27(金) 07:51:29.71ID:/nUzesew
あー、それのことを言ったつもりなんだがわかりにくかったか
空のプロジェクトはソースコード入ってないから自分で新しく入れろってこと
visual c++ 入門とかでググったら色々出てくると思うが
2018/07/28(土) 07:24:00.19ID:Z1+pBlcw
入門書のコードなんですが
http://codepad.org/OHOFfttDのコードだと狙い通りに昭和の年数が帰ってくるんですが
http://codepad.org/kq6vlVqaこちらだと思ったとおりに帰ってきません

参照渡しをすると、この問題は解決できるという答えは分かりましたが、サンプルコードの違いが分からないので
どういうときに参照渡しとやらを使えば良いのか分かりません
教えて下さい
2018/07/28(土) 07:49:21.98ID:A51WA8nQ
テスト
2018/07/28(土) 07:50:15.13ID:A51WA8nQ
関数の引数は新たにデータの領域を作ってそこに値をコピーしてその引数に対して操作をするため
後者のコードでは、もとの変数には影響が及ばない。そのコピーではなく、もともとの変数を関数で操作をさせたい場合に引数を参照に指定する
2018/07/28(土) 08:13:40.83ID:u/a8W7PY
void func(int a) { a = 2; }
func(5); 別に問題ない リテラルを書き換えてるのではなく a はコピーとって コピー側を書き換えてる

void func(int &a) { a = 2; }
func(5); リテラルの書き換えになって駄目ー
2018/07/28(土) 08:19:47.29ID:Z1+pBlcw
>>102
回答有り難うございます
直接操作の意味がよく…分からないです。すみません
前者のコードはint shouwa = WesternToShouwa(western);
と戻ってきた値を代入してるから直接操作にならないんですか?
2018/07/28(土) 08:25:04.68ID:A51WA8nQ
>>104
申し訳ないが5chが謎の規制をしており十分な書き込みができないため他の人に回答を譲る
2018/07/28(土) 08:28:16.09ID:u/a8W7PY
後者のコードは
cin >> year;
WesternToShouwa(year);
って書いてて year が書き換わることを期待してるんやろ?

前社は 代入により書き換えてる
yearA = WesternToShouwa(year@);

@は呼び出しの前後で変わっていない が 代入演算子により Aで書き換えてる
2018/07/28(土) 10:03:32.12ID:Z1+pBlcw
>>106
ありがとうございます。
なんとなくわかってきたような…
どちらのコードも戻り値はかえってきてるんですよね・?
2018/07/28(土) 11:37:12.81ID:A51WA8nQ
両方のコードの20行目
前者はint shouwa = の部分で返った値をshouwa に格納してるが
後者は返った値がどこにも格納されてないのだ
2018/07/28(土) 11:49:20.96ID:Z1+pBlcw
>>108
なるほど!
返ってきた値を引数に直接入れることは不可能なんですね。でも仮引数で&を使えば直接値を変えることが可能になると。
分かりました。ありがとうございます
110デフォルトの名無しさん
垢版 |
2018/07/28(土) 17:16:46.17ID:DikBMpfR
codepad.org/epS67q3p

↑のコードですが、 system() により、 Main1.exe というプログラムを
実行しています。

今、使っている IDE は、 Visual Studioです。

Main1.exe の置き場所ですが、プロジェクトのソースコードが置かれているところに
置くとうまくいきました。

もし、かりに、このプログラムの .exe ファイルを別の場所に持って行った場合に、
Main1.exe はどこに置けばいいのでしょうか?

その位置関係の指定方法が分かりません。
111デフォルトの名無しさん
垢版 |
2018/07/28(土) 17:17:39.98ID:DikBMpfR
http://codepad.org/epS67q3p
2018/07/28(土) 17:23:29.60ID:F9WoxQmy
実行するexe同じフォルダ
113デフォルトの名無しさん
垢版 |
2018/07/28(土) 18:07:52.47ID:DikBMpfR
>>112

ありがとうございます。

今、Visual Studio から実行しています。

http://codepad.org/epS67q3p

↑このexeファイルの場所とMain1.exeの置き場所が違いますが、
うまく実行できています。

http://codepad.org/epS67q3p

逆に、Main1.exeを↑のexeファイルと同じ場所に置くとうまくいきません。

これは、 Visual Studio 上から実行しているからでしょうか?
2018/07/28(土) 18:12:14.33ID:DikBMpfR
>>112

ありがとうございます。
今、試してみたら、同じフォルダに入れることでうまく実行できました。
2018/07/28(土) 18:36:49.62ID:F9WoxQmy
VisualStudioはカレントディレクトリをソースのフォルダにしてるから、簡単に言うとソースフォルダに置いて実行している扱いになってる
2018/07/29(日) 01:20:19.62ID:pFjYaTQt
設定ファイルで指定できるだろ

相対パスの基準ディレクトリになれるのは、

1. カレントディレクトリか、
2. プロジェクトフォルダか、
3. 呼び出す方のファイルのあるフォルダ
117デフォルトの名無しさん
垢版 |
2018/07/30(月) 13:39:08.45ID:7wjh0J3U
関数に配列(data, result)をポインタで渡し,奇数/偶数の判定結果(1:奇数,0:偶数)をresultに格納せよ.その結果を用いて,問題2のように,入力した番号が奇数か偶数かを出力せよ.


intdata[5] = {7, 10, 21, 30, 36};
 intresult[5] = {};←関数で{1, 0, 1, 0, 0}を得る

という課題が出たのですが、さっぱりわかりません;;
2018/07/30(月) 13:52:00.99ID:pFBrx3WW
そうか。
2018/07/30(月) 13:52:38.57ID:pndAnuUe
まず自分でやってみてどの部分がわからないのか確認しろ
2018/07/30(月) 14:21:49.81ID:hdlApzlB
void f(int count, int *data, int *result)
{
int i;
for (i = 0; i < count; ++i)
result[i] = data[i] % 2;
}
2018/07/30(月) 14:38:01.55ID:n1wK/LR0
「さっぱりわかりません」と書かれても、
どう分からないのか分からないと説明のしようもないのだわ。
もちろん、その課題の解答例を示すことはできるけど、
丸写しにしても分からない状態は解消しないだろうし。

とりあえず、判定したい情報が入った配列dataを関数に渡すことはできるのかな?
「引数として整数の配列を渡して、それに格納されてる値をそのまま表示する関数」
のような関数を作れる?
2018/07/30(月) 22:37:05.35ID:8eP7GHtq
学校の宿題は先生に聞け
教えるのが彼の仕事なんだから
2018/07/31(火) 14:17:05.96ID:tdoY3Pm4
金出して教わってるんだからね
2018/07/31(火) 14:24:34.18ID:PCFGvven
初心者歓迎って書いてあるって言うのに
2018/07/31(火) 14:36:16.60ID:SI7qMfWn
丸投げ歓迎ではないだろ
2018/07/31(火) 15:13:55.43ID:PCFGvven
何が良くて、何が駄目か、>>1に明記しないと
初心者を誘い込んでいたぶっている様にしか見えないな
2018/07/31(火) 16:50:22.37ID:SI7qMfWn
そう思うなら答えてやれよ
2018/07/31(火) 17:26:41.93ID:33h3+A0b
だよなあ
答える方だってさっぱりわかりませんがさっぱりわかりません
2018/08/01(水) 03:37:53.71ID:DhLyFl3e
優しいC++という入門書を読んでるんですが
デフォルト引数についての説明が少なすぎてよくわかりません
どやって宣言するんでしょうか?プロトタイプ宣言の文にもデフォルト引数を書く必要があるんですか?
なんか簡単なコードを書いて頂けると助かります
2018/08/01(水) 04:45:10.06ID:oNWxQcbM
>>129
基本的には宣言の方に書くもんだ。
2018/08/01(水) 05:37:51.62ID:DhLyFl3e
>>130
ありがとうございます。関数の本体には引数書かなくていいんですね(+_+)
2018/08/01(水) 06:08:28.66ID:oNWxQcbM
>>131
関数定義の場所でデフォルト引数を書くことも出来るけどね。
関数の定義は宣言を兼ねるので、宣言が不要ならば関数定義の箇所でデフォルト引数を書いておけば
それ以降の呼出し箇所でデフォルト引数が使われる。
ただし、宣言と定義の両方にデフォルト引数を書いたら駄目。

デフォルト引数は関数呼出しのときに補われるのであるから、
関数呼出しのときにデフォルト引数が何かわかっていなければならないので、
分割コンパイルしたときに実装 (関数定義) 側にデフォルト引数が書かれていても
呼出し側でデフォルト引数が何かわからない。
それでは困るから、原則としてはプロトタイプ宣言の側にデフォルト引数を書くものだと思っておけば無難ってことになる。
2018/08/02(木) 04:15:29.78ID:fAfw4oAh
すいません入門書のfor文のコードなんですが
http://codepad.org/A357YvMb
19行目からどういう順番で動いて何やってるのか一切分からないので解説して下さい;
点数高い順に並べ替えてるみたいなんですが、どう動いてるのか分からないので全然納得出来ないです
2018/08/02(木) 05:55:02.70ID:RdYw4Wzo
>>133
まず先頭と2番目を比較し、2番目の方が大きければ先頭と入れ替える。
次に先頭と3番目を比較し、3番目の方が大きければ先頭と入れ替える。
・・・
先頭と末尾をを比較し、末尾の方が大きければ先頭と入れ替える。
ここまでで、先頭の要素は、他のすべての要素より大きくなる。
つまり、先頭の要素は一番大きい要素になる。(内側のループ1回目)

次に2番目と3番目、2番目と4番目・・・2番目と末尾で同じことをすることで、
2番目の要素は2番目に大きい要素になる。(内側のループ2回目)

あとはこれを繰り返せば、大きい純に並び替えられる。

詳しくは、「選択ソート』で検索。
2018/08/02(木) 08:03:24.20ID:fAfw4oAh
>>134
ありがとうございます
[]の中のtとsが添字と要素数ごっちゃになって混乱してました
難しい…
136デフォルトの名無しさん
垢版 |
2018/08/05(日) 18:48:49.49ID:IlbWYfru
どうか教えてください
C++言語プログラミングのクラス実装にて
文字列を合成するメンバ関数を以下のように書きました
std::string オリジナルクラス::getConectString()
{
return 文字列1 + 文字列2;
}

このあとに、合成された文字列の「長さ」を求めるためのメンバ関数を
int オリジナルクラス::getConnectLength()
{
return getConnectString().length();
}
とすると「長さ」が正しく求まりました
上記のように、getConnectString()というメンバ関数名に.length()を用いることは
使い方としてあっていますか?
よろしくお願いします
2018/08/05(日) 19:17:21.88ID:OnEvhE95
>>136
あってます
138デフォルトの名無しさん
垢版 |
2018/08/05(日) 20:37:06.00ID:IlbWYfru
>>137
ありがとうございます
不安解消できました
2018/08/05(日) 21:00:08.49ID:lZNE8En/
メソッドチェーン と調べろ
140デフォルトの名無しさん
垢版 |
2018/08/05(日) 21:03:53.86ID:IlbWYfru
>>139
メソッドチェーンを早速調べてみます
初めて知る言葉なので感謝です
141デフォルトの名無しさん
垢版 |
2018/08/09(木) 06:33:36.32ID:PReqPOhL
入門書のコードなんですけど
http://codepad.org/iEAdMKmK
これをvisualstudio2017で実行するとstrcat,scrcpyの宣言を確認してくださいとか何とかたくさん出て実行できません
何が原因なんでしょうか?何かインストールのし忘れですか
2018/08/09(木) 07:50:28.77ID:xHgFHFx+
「c++ strcpy」「c++ strcat」で検索!

http://www.cplusplus.com/reference/cstring/strcpy/
http://www.cplusplus.com/reference/cstring/strcat/

#include <stdio.h>
#include <string.h>

#include の後ろに、半角空白が入る
2018/08/09(木) 10:29:21.43ID:Kf5blEgn
strcpy_s じゃねえの
2018/08/09(木) 13:47:27.82ID:NndPCS/I
「*_s を使え」は警告であってエラーじゃなかった記憶
include 行より前に
#define _CRT_SECURE_NO_DEPRECATE
を置くと警告は消せるけど

実行できません=コンパイルエラーなら
本質は >>142 の stdio.h と string.h のインクルード足らずでしょう
2018/08/09(木) 18:20:43.03ID:PReqPOhL
>>142->>144
ありがとうございます。
#include <stdio.h> #include<string.h>入れても結果は同じでした。(iostremをぬいても結果は同じでした)
https://gyazo.com/a4a296eff2f108205068ec8724814005
自分の環境がおかしいんですかね…入門書のコード自体は間違ってないんでしょうか?
>>143さんの
strcpy_s ,strcat_s という表記にしてみたらおかげさまで実行できました!
146144
垢版 |
2018/08/09(木) 20:22:12.13ID:jMDw6MMS
スクショあり
「セキュアじゃないから使うな」はエラーになってるのな
2018/08/09(木) 21:21:09.77ID:N7zY56wf
>>142
C++のコードでstring.hを勧めちゃダメでしよ
2018/08/09(木) 21:33:27.01ID:obVRq9lE
>>147
最初の質問読まずに脊髄反射すんな
2018/08/09(木) 22:06:19.25ID:b+KVdser
それ言い出したらstrcpy_s、strcat_sとかもどうかと思うよ…
2018/08/09(木) 23:46:51.29ID:N7zY56wf
>>148
最初の質問が>>141なら、既にcstringをインクルードしてるんだから、わざわざstring.hなんて書くべきではないと思うけど、最初の質問てどれのことだろう?
151デフォルトの名無しさん
垢版 |
2018/08/10(金) 04:21:11.55ID:ZbqK12l8
class Abc {
public: int meas() {return 1;}
};
int Func() {return 1;}
int main()
{
Abc aa;
int (*flist[])() = {aa.meas}; // 1.error 非標準の構文
int(*fpFunc[])() = { Func ,Func}; //2.ok
}
クラスインスタンスのメンバー関数の関数テーブルをつくりたいんだができない。何か良い方法は
無いものだろうか? 2ができるのに1ができないのは解せない。
2018/08/10(金) 04:45:52.84ID:KaDy9gZn
http://www7b.biglobe.ne.jp/~robe/cpphtml/html03/cpp03057.html
153デフォルトの名無しさん
垢版 |
2018/08/10(金) 07:18:29.02ID:ZbqK12l8
回答ありがとう。
class CTest { public: void Func(); };
void (CTest::*fpFunc)() = CTest::Func;
問題なくコンパイルできたと思います。このように、メンバ関数ポインタの文法は
<戻り値の型> (<クラス名>::*<変数名>(<引数リスト>);

この説明は読んだが、それはインスタンスに対してはつかえないでしょ。
{aa.func,bb.func}
のように集合したい場合に使えないから上の例とは問題がすこし違うとおもう。
というかC++では仕様的に無理なのかな?
2018/08/10(金) 07:56:57.78ID:xeFjyQQA
>>153
無理だよ。
メンバ関数の実体はインスタンス毎にそれぞれメモリ上に配置されるのではなく、異なるインスタンスでも実体は一つ。だから、インスタンスごとにメンバ関数のアドレスが異なる訳ではないので、そういうことはできない。
メンバ関数をポインタ経由で呼ぶためには、インスタンスそのもののポインタと、メンバ関数ポインタをセットで使う必要がある。
2018/08/10(金) 08:08:21.45ID:a+3O8uOm
ローベルのサイトって糞じゃね?
2018/08/10(金) 08:11:57.37ID:iZqKv3XP
世の中糞サイトの方が多いんだから
わざわざ糞サイトを宣伝しなくて良い
2018/08/10(金) 08:52:37.28ID:TsnKzz2s
>>154
なるほどな・・・質問者ではないが勉強になる。
2018/08/10(金) 08:57:27.28ID:beAAeNyA
>>154
詳しい解説サンクス
2018/08/10(金) 11:57:40.37ID:LvXbuhRM
>>151
普通に
int main(){
Abc aa;
Abc bb;
int list[] = {aa, bb};

auto x = list[0].meas(); // 呼び出し

じゃダメなの?
2018/08/10(金) 12:33:00.16ID:/Djii9VU
>>157
thisポインタ周りの話は基本中の基本だと思ってたんだが最近は違うんかね
2018/08/10(金) 13:05:27.16ID:2oUNvS+I
対象が virtual なメンバ関数だともっと面倒なことになりそう
2018/08/10(金) 13:06:45.85ID:LvXbuhRM
メンバ関数ポインタってあまり使う機会ないから
俺も数回しか使ったことないし
2018/08/10(金) 13:07:32.92ID:2oUNvS+I
>>161 のは、あくまでもメンバ関数のポインタをテーブルに持ちたいなら という話で
2018/08/10(金) 18:49:13.66ID:Xd038t+R
>>151
std::functionとラムダ式組み合わせたら?
std::function<int()> first[] = {[&aa](){return aa.meas();}};
165デフォルトの名無しさん
垢版 |
2018/08/11(土) 07:05:15.22ID:eZwdztat
>>154
そういうことなのですか? 分かりやすい説明でスッキリしました。

>>159
そうですね。それだとイメージ的にはthisのポインターリストですからメンバーを含めてcと同様の関数テーブルをつくるには
PointerPareList[]={
{this1, メンバー関数のローカルポインター1},
{this2, メンバー関数のローカルポインター2},
{thisn, メンバー関数のローカルポインターn},
};
にすればよいのかな。でもローカルポインター(クラス内の相対アドレス)がとれない?でしょうね。それに実行方法も
問題ですね。

>>164
私もラムダを使う方法で実現しました。functionは知らなかったので使わずに関数ポインター配列でもできました。
ラムダ式を使うとすんなり動作しました。
2018/08/11(土) 07:22:17.85ID:WnJNWI2T
入門書のコードなんですが
http://codepad.org/IIJB22M5
これの11行目と12行目は何をする関数でこのプログラムで何の役割を担ってるんですか?
typedef,ファイルの分割、参照辺りから駆け足になってきて本の説明だけじゃ中々理解できません(+_+)
2018/08/11(土) 07:36:22.18ID:d91dd04/
getter/setterはaccessorアクセサというもので、メンバ変数をやりとりするための関数

なぜこんなものが必要なのかはJavaにて議論されてる
ttps://qiita.com/katolisa/items/6cfd1a2a87058678d646
ttp://d.hatena.ne.jp/Nagise/20141010/1412930502
ttps://geechs-magazine.com/tag/tech/20170215_2
ttps://teratail.com/questions/27789
ttps://www.deep-rain.com/programming/program/626
2018/08/11(土) 07:51:24.20ID:L4B/ldSd
>>165
ラムダ式を関数ポインタに代入できるのは、キャプチャしてない場合だけ。
今回の場合、元のオブジェクトをキャプチャする必要があるので、
関数ポインタに代入することは出来ないはず。
実際、手元のclang++ではビルドできなかった。
処理系の独自拡張でたまたま動作しているだけじゃないかな?
2018/08/11(土) 08:05:06.20ID:WnJNWI2T
>>167
java知らないので一瞬わからなかったです;
ドット演算子でメンバ関数表示出来ないからややこしいことしてたんですね
分かりました。ありがとうございます
2018/08/11(土) 08:07:37.86ID:dFDFw6X4
(´・ω・`)?
171デフォルトの名無しさん
垢版 |
2018/08/11(土) 08:50:14.12ID:eZwdztat
>>168
キャプチャしてません。(あまりよくわかってないが、、)
オブジェクトをグローバルで定義してるからだろうか?
組み込みなので頭で定義してる。

fpfunc funclist[] = {
[](bool tf ){ Seqif.ledon1( tf ) },
[](bool tf ){ Seqif.ledon12( tf ) },
[](bool tf ){ Seqif.ledon21( tf ) },
[](bool tf ){ Seqif.ledon35( tf ) }
}
2018/08/11(土) 10:06:46.89ID:WNr/dTgn
>>165
> PointerPareList[]={
> {this1, メンバー関数のローカルポインター1},
> {this2, メンバー関数のローカルポインター2},
> {thisn, メンバー関数のローカルポインターn},
> };
そのメンバー関数って要素ごとに異なるの?
異なるならこんな感じでやればいい
#include <stdio.h>
class Abc {
private:
int n;
public:
Abc(int n_) : n(n_) {}
int meas0() { return n + 0; }
int meas1() { return n + 1; }
};
int main() {
Abc aa(10);
Abc bb(20);
struct {
Abc& This;
int (Abc::*Func)();
} list[] = {
{ aa, &Abc::meas0 }, { aa, &Abc::meas1 }, { bb, &Abc::meas0 }, { bb, &Abc::meas1 }
};
for (auto x : list) {
auto n = (x.This.*x.Func)();
printf("n = %d\n", n);
}
}
2018/08/11(土) 18:31:52.91ID:WnJNWI2T
>>170
メンバ変数に直接アクセス出来ないから値だけを返す関数作ってるのかな?って
URL先見て理解したんですが間違えてますか;
2018/08/12(日) 09:04:38.07ID:0uSju4C4
メンバ変数を外部から書き換えさせないためのprivate指定と、
書き換えさせないけど値の読み出しはさせてやるためのget〜関数、
と考えるのが宜しいかと。
175デフォルトの名無しさん
垢版 |
2018/08/12(日) 21:42:22.35ID:zeMljtXN
>>172
凄い。そういうことができるんですね。
メンバー関数のタイプはすべて同じなのだがクラスのタイプがことなるものが混在するばあいはどうすればいいだろ。
Abc aa(10);
Efg bb(20);
こんな場合。
2018/08/14(火) 03:08:53.25ID:nTdTTFHr
size_tを戻り値に使った関数が定義されてるんですけど、size_tはどういう型なんですか?
この入門書で、何の説明もなく使われてるんですが…
2018/08/14(火) 06:59:55.91ID:EPC9iky2
>>176
サイズを表すのに充分な unsigned な整数型
2018/08/14(火) 07:39:25.77ID:sy/JHgHD
何のサイズか書かないと意味が無い
2018/08/14(火) 08:07:02.01ID:nTdTTFHr
>>177
ありがとうございます。照らし合わせたら何とか理解できました;
それとなんですが……ロベールってプログラミング初めてやるのに向いてる書籍ではないんでしょうか?
書籍スレで聞いたら噛みつかれたりしてまともじゃなかったので、、もしもっと簡単な本あれば教えてほしいです;
2018/08/14(火) 10:46:11.90ID:EPC9iky2
>>179
入門者向けというのは内容が簡単という意味ではない。
入門的なことを根本的な理屈から説明している本は難しいかもしれないが入門者にとっては有用だし、
でもそういうのはモチベーションが続かないっていう人にとっては理屈はともかく動作するものを中心に
した方が良いかもしれないし、学習のスタンスによるんじゃないの。
良いか悪いかというスカラ的な軸では評価できないよ。

俺はロベールの本とやらを読んだことが無いので具体的な評価はできないけども、
古いという点でややマイナス評価かな。
C++11 (C++ の仕様の 2011 の改定) が大きなターニングポイントなので、
それよりも古い仕様を想定した書籍は現代作法的にちょっと微妙な箇所があったりする。
2018/08/14(火) 11:13:21.53ID:5K5qKv3G
>>180
C++11 or later をあからさまにターゲットにした和書は
https://www.amazon.co.jp/dp/4774174084/
しか持っていない、これも辞典形式で右辺値参照とかは詳しくない、いまはもうちょっと増えているかと期待するが
2018/08/14(火) 18:10:42.27ID:TB9AjC50
>>175
基本クラスを作って各々派生させるくらいしか思いつかなかった
#include <stdio.h>
class Base {
public:
iint n;
Base(int n_) : n(n_) {}
virtual int meas0() = 0;
virtual int meas1() = 0;
};
class Abc: public Base {
public:
Abc(int n) : Base(n) {}
int meas0() override { return n + 0; }
int meas1() override { return n + 1; }
};
class Def : public Base {
public:
Def(int n) : Base(n) {}
int meas0() override { return n + 10; }
int meas1() override { return n + 20; }
};
... 続く
2018/08/14(火) 18:12:17.45ID:TB9AjC50
int main() {
Abc abc(100);
Def def(200);
struct {
Base& This;
int (Base::*Func)();
} list[] = {
{ abc, &Base::meas0 }, { abc, &Base::meas1 },
{ def, &Base::meas0 }, { def, &Base::meas1 }
};
for (auto x : list) {
auto n = (x.This.*x.Func)();
printf("n = %d\n", n);
}
}
2018/08/14(火) 22:59:32.77ID:nTdTTFHr
>>180
いいお値段する本なので中々乗り換える決心が付きませんでしたが
これを機にもっと簡単なコードが沢山載ってて手で動かしながら直感的に覚えられる新しい版の本探してみます。
スレチにも関わらずアドバイス頂きありがとうございます(´ω`)
入門書≠簡単ではないんですね…苦しんで覚えるCみたいにいい意味でタイトルに偽りある本があればいいんですが
185デフォルトの名無しさん
垢版 |
2018/08/15(水) 02:59:09.35ID:gGWJA2ph
>>182
参考になります。ありがとう。
186デフォルトの名無しさん
垢版 |
2018/08/15(水) 03:01:14.65ID:gGWJA2ph
namespace Name1{
void func1(){}
}
namespace Name2{
void test{
Name1::func1(); //error になる。
}
}
vs2017でテストするとコンパイルOKなのだが、TIのccsコンパイラだとエラーになる。
TIの場合はNamespaceはクラスにたいしては有効だけれども、グローバル関数に関してはエラーになる。
これは正しい文法なのだろうか?
187デフォルトの名無しさん
垢版 |
2018/08/15(水) 03:30:10.43ID:JotEkZGJ
pubgはUE4で作られてる
そのUE4はC++
銃弾の反動とかゲーム中にどんな計算されてるのか知りたいんだけどどうやったら知れますかね?
2018/08/15(水) 04:36:03.80ID:WdeJX/bN
>ロベールってプログラミング初めてやるのに
まず、プログラミングの初心者が、C++ を学ぶには数年以上掛かる!
Ruby など数言語を数年いじくりまわした人が、やっと、C++ を学ぶスタート地点に立てる

各言語の入門書は、決してプログラミング初心者向けではない!
数言語をいじくりまわした人が、その言語に関しては、知らないというだけ。
既に数年のコンピューターリテラシーを学んだ人が、各言語の入門書を学べる

つまり、プログラミング初心者と、各言語の初心者は違う。
まず、Ruby, Python, JavaScript など、軽量言語を数年やるべき

C++ は最難関!
20年以上、C で開発している中高年でも、ほとんどの人は出来ない!

それでも、やりたいのなら、ロベールしかない。
他の本では、絶対に無理だから!

漏れらみたいに、10言語を何十年もやってれば、速習でも読めるけど。
初心者がC++ なんて、時間の無駄
2018/08/15(水) 05:34:32.93ID:zJa27iMm
そこまですごいもんでも無いと思うがな
ストラウプスのネタ本を読んでからまったりと覚えれば良いと思うがな
190188
垢版 |
2018/08/15(水) 05:36:14.55ID:WdeJX/bN
例えれば、プログラミングの初心者は、小学生だろ。
一方、C++ は高校生

小学生が、高校生の教科書を理解するには、10年掛かる。
読んでも理解できない

小・中・高と、簡単なものから順序よく理解していかないといけない

だから、プログラミングの初心者が、C++ から始めるのが根本的に間違い!
それとも誰か、プログラミングの初心者は、C++ から始めろって勧めた奴でもいたか?
2018/08/15(水) 05:38:50.07ID:fSWxnCwv
>>188
> プログラミングの初心者が、C++ を学ぶには数年以上掛かる
> Ruby など数言語を数年いじくりまわした人が、やっと、C++ を学ぶスタート地点に立てる

こマ?


> 20年以上、C で開発している中高年でも、ほとんどの人は出来ない!

新しいことを覚える気がないK&RかC89脳おじさんなだけじゃないの?


> 各言語の入門書は、決してプログラミング初心者向けではない!
> 既に数年のコンピューターリテラシーを学んだ人が、各言語の入門書を学べる
> まず、Ruby, Python, JavaScript など、軽量言語を数年やるべき

RubyやPythonやJavaScirpt の入門書も同様ではないの?
2018/08/15(水) 05:40:47.64ID:fSWxnCwv
そうしたら、RubyやらPythonの入門書の読み方、勉強の仕方を覚えるための

学習用擬似言語みたいなものが必要になってくるな
2018/08/15(水) 05:41:40.20ID:fSWxnCwv
C++も11より前とそれ以降じゃ随分話が違うと思うが…
■ このスレッドは過去ログ倉庫に格納されています