次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part132
http://mevius.5ch.net/test/read.cgi/tech/1507561894/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.102【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1509780815/
■長いソースを貼るときはここへ。■
http://codepad.org/
https://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
C++相談室 part133
レス数が950を超えています。1000を超えると書き込みができなくなります。
1デフォルトの名無しさん (ワッチョイ 1fcf-H1rY)
2017/11/24(金) 16:52:50.43ID:WoNXR2ax0864デフォルトの名無しさん (スプッッ Sd0a-zuLH)
2018/01/11(木) 07:23:14.65ID:1qlx+5WGd865デフォルトの名無しさん (スプッッ Sd0a-zuLH)
2018/01/11(木) 07:33:45.62ID:1qlx+5WGd freadを考えてみたけどファイルサイズ不明な場合一度に読み込むバッファサイズとかどうなるん?
866デフォルトの名無しさん (ワッチョイ 6a12-0PCX)
2018/01/11(木) 08:03:11.10ID:Nwq/3BKy0 各マシンでの最適なバッファサイズを逐一計算して求めるのがC++
867デフォルトの名無しさん (ドコグロ MM12-J7fK)
2018/01/11(木) 08:10:51.08ID:W1ryMExAM >>865
環境わからんからなんとも言えんが10KB程度とっときゃいいんじゃね?
環境わからんからなんとも言えんが10KB程度とっときゃいいんじゃね?
868デフォルトの名無しさん (ワッチョイ a59e-/QpA)
2018/01/11(木) 09:08:45.65ID:lNcIwFA20869デフォルトの名無しさん (ワッチョイ 4923-v0zr)
2018/01/11(木) 09:58:35.85ID:3a3jMnur0 >>860
fopen の引数は “rb” “wb” にしておくのが一般的
もし実用品として使うならなるべく大きな単位、
最低でも1Mバイト程度はまとめて読み書きすると良いよ。100Mでもいい。
細かい単位で読んで書いてを行うとHDDで大きなファイルを処理する場合とてつもなく遅くなる。
あとそういう書き方をしたいならそれは c++ ではなく
c のスレ(あるのか知らんが)で聞く内容だと思う
fopen の引数は “rb” “wb” にしておくのが一般的
もし実用品として使うならなるべく大きな単位、
最低でも1Mバイト程度はまとめて読み書きすると良いよ。100Mでもいい。
細かい単位で読んで書いてを行うとHDDで大きなファイルを処理する場合とてつもなく遅くなる。
あとそういう書き方をしたいならそれは c++ ではなく
c のスレ(あるのか知らんが)で聞く内容だと思う
870デフォルトの名無しさん (ワッチョイ 5922-UJUP)
2018/01/11(木) 10:03:28.58ID:S67tZ9jk0 >>868
不勉強を恥じろボケ
#include <filesystem>
#include <iostream>
auto copy(char const* src, char const* dst)
{
try
{
return std::filesystem::copy_file(src, dst);
}
catch(std::exception& err)
{
std::cerr << err.what();
}
return false;
}
不勉強を恥じろボケ
#include <filesystem>
#include <iostream>
auto copy(char const* src, char const* dst)
{
try
{
return std::filesystem::copy_file(src, dst);
}
catch(std::exception& err)
{
std::cerr << err.what();
}
return false;
}
871はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5e6f-QpsD)
2018/01/11(木) 10:19:39.83ID:jbhd+X3/0 filesystem がまだ使えない環境もあるかもしれんので小ネタを披露しておくと、
rdbuf を使う方法があるんや。
ifstream in(src);
ostream out(dst);
out << in.rdbuf();
みたいな要領な。 エラー処理は適宜うまいことやってくれ。
rdbuf を使う方法があるんや。
ifstream in(src);
ostream out(dst);
out << in.rdbuf();
みたいな要領な。 エラー処理は適宜うまいことやってくれ。
872デフォルトの名無しさん (ワッチョイ 4923-v0zr)
2018/01/11(木) 11:19:16.78ID:3a3jMnur0 パフォーマンス厨だが
もし実用するなら setvbuf の rdbuf 版みたいなのがあるからそれも呼ぶべきと一言
もし実用するなら setvbuf の rdbuf 版みたいなのがあるからそれも呼ぶべきと一言
873デフォルトの名無しさん
2018/01/11(木) 12:15:07.96 system("cp -f a.txt b.txt") でいいよね(´・ω・`)
874デフォルトの名無しさん (スップ Sd0a-iyAC)
2018/01/11(木) 13:09:33.65ID:EPrc03FTd パフォーマンス厨なら
リードとライトは別スレッドにするとか
読み書きサイズをクラスタサイズの倍数にするとか
リードとライトは別スレッドにするとか
読み書きサイズをクラスタサイズの倍数にするとか
875デフォルトの名無しさん (ワッチョイ 7db3-JQPx)
2018/01/11(木) 13:20:11.53ID:eUOyd8Rr0 物理的に別のデバイスならリード/ライトは別スレッドで回したほうが速いだろうが、同じデバイスだとシングルスレッドでも大差ないだろうな
あとはバッファサイズをできるだけ大きく取って、IOの発行数を抑えるのが王道かな
あとはバッファサイズをできるだけ大きく取って、IOの発行数を抑えるのが王道かな
876デフォルトの名無しさん (ワッチョイ 118a-QzTo)
2018/01/11(木) 14:07:04.69ID:VjH1J6HL0877デフォルトの名無しさん (アウアウカー Sa55-EKU2)
2018/01/11(木) 14:43:56.63ID:EDmjquO+a プログラミングなんてどっかからコード引っ張って書けば一切手を汚すことなくできるのに何偉そうに言ってんだか...
英語読めないからって海外の文献を参考にせず自分で作ろうとする日本人の無駄な努力には呆れるよ
アメリカ「アホだから」
韓国「レベル低いな」
インド「アジアの恥さらし」って思われてそう
英語読めないからって海外の文献を参考にせず自分で作ろうとする日本人の無駄な努力には呆れるよ
アメリカ「アホだから」
韓国「レベル低いな」
インド「アジアの恥さらし」って思われてそう
878デフォルトの名無しさん (アウアウカー Sa55-EKU2)
2018/01/11(木) 14:48:19.11ID:xUZeJB/aa 必死こいてコード書いてるやつ見ると情けない
世界65億人130カ国!
お前の書いてるコードがまさか地球上にないものだと思ってんの?
プログラマーの端くれが、そりゃトップで活躍するプログラマーなら常に新しいものを求めてるから生き残るけど...
それ未満は10年後にはAI、またはコード共有化が進んで消えた職業になっているだろうね
悲しいけど現実見てくれ
世界65億人130カ国!
お前の書いてるコードがまさか地球上にないものだと思ってんの?
プログラマーの端くれが、そりゃトップで活躍するプログラマーなら常に新しいものを求めてるから生き残るけど...
それ未満は10年後にはAI、またはコード共有化が進んで消えた職業になっているだろうね
悲しいけど現実見てくれ
879デフォルトの名無しさん (ワッチョイ 5922-UJUP)
2018/01/11(木) 15:17:43.47ID:S67tZ9jk0 構ってちゃんが必死で連投してるな
著作権だの互換性だのと縁のない幸せ者だな
著作権だの互換性だのと縁のない幸せ者だな
880デフォルトの名無しさん (ドコグロ MM0a-5dQQ)
2018/01/11(木) 15:32:14.08ID:deNLSlJUM >>876
バカにするなら模範コードぐらい書いてやれよ。
バカにするなら模範コードぐらい書いてやれよ。
881デフォルトの名無しさん (ワッチョイ ea34-yppE)
2018/01/11(木) 16:16:00.19ID:bQ6Hme0D0 テストしてないけど
const size_t BUF_SZ=8192;
char buf[BUF_SZ];
while(!feof(fi)){
size_t n=fread(buf,sizeof char,BUF_SZ,fi);
if(n&&n!=fwrite(buf,sizeof char,n,fo)) {perror("ディスクエラー");return -1;}
}
>>873
WindowsならSHFileOperationかな?
windowsでsystem叩くのは文字数制限とか""のくくり方とか微妙に怪しくてなんか嫌なんよね
const size_t BUF_SZ=8192;
char buf[BUF_SZ];
while(!feof(fi)){
size_t n=fread(buf,sizeof char,BUF_SZ,fi);
if(n&&n!=fwrite(buf,sizeof char,n,fo)) {perror("ディスクエラー");return -1;}
}
>>873
WindowsならSHFileOperationかな?
windowsでsystem叩くのは文字数制限とか""のくくり方とか微妙に怪しくてなんか嫌なんよね
お題:http://mevius.2ch.net/test/read.cgi/tech/1480579110/981
回答
http://mevius.2ch.net/test/read.cgi/tech/1480579110/997
http://mevius.2ch.net/test/read.cgi/tech/1434079972/30
https://ideone.com/LV4UdE
while (bytesDataNum > 0) {
int n;
fin.read((char *)&buffer, std::min(N, bytesDataNum));
if (fin.fail())
return 0;
n = fin.gcount();
fout.write((char *)&buffer, n);
if (fout.fail())
return 0;
bytesDataNum -= n;
}
return 1;
}
C++fstream/read/write を使うのだったらこんなところか
>>881 の n = fread() が BUF_SZ に満たなくてもエラーが立ってしまうのが思案のしどころだね、あらかじめ読み込みバイト数を知っておかなければならない‥
回答
http://mevius.2ch.net/test/read.cgi/tech/1480579110/997
http://mevius.2ch.net/test/read.cgi/tech/1434079972/30
https://ideone.com/LV4UdE
while (bytesDataNum > 0) {
int n;
fin.read((char *)&buffer, std::min(N, bytesDataNum));
if (fin.fail())
return 0;
n = fin.gcount();
fout.write((char *)&buffer, n);
if (fout.fail())
return 0;
bytesDataNum -= n;
}
return 1;
}
C++fstream/read/write を使うのだったらこんなところか
>>881 の n = fread() が BUF_SZ に満たなくてもエラーが立ってしまうのが思案のしどころだね、あらかじめ読み込みバイト数を知っておかなければならない‥
883デフォルトの名無しさん (ワッチョイ ea34-yppE)
2018/01/11(木) 17:11:02.74ID:bQ6Hme0D0 せやね。エラーチェックは難しいのう。
const size_t BUF_SZ=8192;
char buf[BUF_SZ];
while(!feof(fi)){
size_t n=fread(buf,sizeof char,BUF_SZ,fi);
if(!n) {perror("ディスク読み込みエラー");return -1;}
if(n!=fwrite(buf,sizeof char,n,fo)) {perror("ディスク書き込みエラー");return -1;}
}
const size_t BUF_SZ=8192;
char buf[BUF_SZ];
while(!feof(fi)){
size_t n=fread(buf,sizeof char,BUF_SZ,fi);
if(!n) {perror("ディスク読み込みエラー");return -1;}
if(n!=fwrite(buf,sizeof char,n,fo)) {perror("ディスク書き込みエラー");return -1;}
}
884デフォルトの名無しさん (ワッチョイ 118a-QzTo)
2018/01/11(木) 17:32:08.08ID:VjH1J6HL0 >>880
さてそんなこと言われてもプラットフォームすら指定されていないし
例えばWindowsなら↓一発で済む話だよな
https://msdn.microsoft.com/ja-jp/library/cc429185.aspx
ファイルコピーごときに自前でコードなんか書いてられるかよ
さてそんなこと言われてもプラットフォームすら指定されていないし
例えばWindowsなら↓一発で済む話だよな
https://msdn.microsoft.com/ja-jp/library/cc429185.aspx
ファイルコピーごときに自前でコードなんか書いてられるかよ
885デフォルトの名無しさん (ワッチョイ 5922-UJUP)
2018/01/11(木) 17:55:46.00ID:S67tZ9jk0 ISO/IEC14882の現行規格を差し置いて何を今さら。。。
Windowsなら純正コンパイラが対応しているだろうが
Windowsなら純正コンパイラが対応しているだろうが
886デフォルトの名無しさん (ワッチョイ 39eb-0PCX)
2018/01/11(木) 17:57:34.42ID:zx3yce6m0 ニートが部下がどうのこうの言ってて笑える
887デフォルトの名無しさん (ワッチョイ 118a-QzTo)
2018/01/11(木) 18:03:32.29ID:VjH1J6HL0 >>886
お前の境遇はよく分かったから勝手に笑っとけ
お前の境遇はよく分かったから勝手に笑っとけ
888デフォルトの名無しさん (ワッチョイ 9ee7-5dQQ)
2018/01/11(木) 19:35:14.53ID:ga/Vikbp0889デフォルトの名無しさん (ワッチョイ 118a-QzTo)
2018/01/11(木) 19:49:16.17ID:VjH1J6HL0 boost依存は出来る限り避けたいなあ
890デフォルトの名無しさん
2018/01/11(木) 21:10:50.25 またこの荒らしか
Pythonのスレにも居たな
Pythonのスレにも居たな
891デフォルトの名無しさん
2018/01/11(木) 21:11:35.20892デフォルトの名無しさん (ワッチョイ f17f-XFrZ)
2018/01/11(木) 21:40:25.98ID:x0MoCwhB0 とりあえずだ、fcloseの戻り値判定してないのも誰かつっこんでやれよ。。。
普段気にするところじゃないけど、わりと重要だよな?書き込み系のclose処理
普段気にするところじゃないけど、わりと重要だよな?書き込み系のclose処理
893デフォルトの名無しさん (スプッッ Sdea-v0zr)
2018/01/11(木) 22:01:49.89ID:qoSoxo2Ld バッファサイズ8kだと少し大きなファイルコピーすると結構遅くなるよ
書き込み側はOSのキャッシュが効くからそうはならんだろうけど
メモリはいっぱいあるんだし動的確保でもして一気に128Mくらい行くべし
>>889
簡単な処理はあまり外部依存しないコードにしたいよね
書き込み側はOSのキャッシュが効くからそうはならんだろうけど
メモリはいっぱいあるんだし動的確保でもして一気に128Mくらい行くべし
>>889
簡単な処理はあまり外部依存しないコードにしたいよね
894デフォルトの名無しさん (ブーイモ MM8e-TSXj)
2018/01/11(木) 22:07:24.01ID:1W7yBpCQM 関数のconst参照引数って
コピーが重い方だと意味あるけど
intとかsize_tとかだと全く意味ないの?
コピーが重い方だと意味あるけど
intとかsize_tとかだと全く意味ないの?
895デフォルトの名無しさん
2018/01/11(木) 22:18:41.87 >>894
どっちが軽いか考えてみればいいじゃん
(1) 常に8バイトの数値(アドレス)を引数として渡すためにコピーして、呼び出された関数側でそのアドレスから値をコピーして、処理に使う
(2) 1〜8バイトの数値を引数として渡すためにコピーして、呼び出された関数側でその値を処理に使う
どっちが軽いか考えてみればいいじゃん
(1) 常に8バイトの数値(アドレス)を引数として渡すためにコピーして、呼び出された関数側でそのアドレスから値をコピーして、処理に使う
(2) 1〜8バイトの数値を引数として渡すためにコピーして、呼び出された関数側でその値を処理に使う
896デフォルトの名無しさん (ブーイモ MM8e-TSXj)
2018/01/11(木) 22:39:48.54ID:1W7yBpCQM897はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5e6f-QpsD)
2018/01/11(木) 23:12:05.45ID:jbhd+X3/0 >>896
内実としては参照はデリファレンスが自動化されたポインタと思ってもさしつかえないと思う。
ABI レベルで見ればポインタと互換性が有りさえするアーキテクチャも有る。 (言語仕様で保証しているわけではない。)
内実としては参照はデリファレンスが自動化されたポインタと思ってもさしつかえないと思う。
ABI レベルで見ればポインタと互換性が有りさえするアーキテクチャも有る。 (言語仕様で保証しているわけではない。)
898デフォルトの名無しさん (ワッチョイ 2a98-aOXM)
2018/01/12(金) 07:31:11.05ID:uquo2DHh0 はちみつ餃子はc++とscheme以外に何が使えるの?
899はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5e6f-QpsD)
2018/01/12(金) 07:51:53.51ID:UAqgHqOi0 そんなこと知ってどうするんや
900デフォルトの名無しさん (ワッチョイ 2a98-aOXM)
2018/01/12(金) 07:54:27.14ID:uquo2DHh0 好奇心ですよ好奇心
901デフォルトの名無しさん (ワッチョイ 39eb-0PCX)
2018/01/12(金) 07:54:44.69ID:xirJS+K20 マウント取りに行くんだろ
902デフォルトの名無しさん (ワッチョイ 2a98-aOXM)
2018/01/12(金) 07:56:18.96ID:uquo2DHh0 そんなに悪いかよ
じゃあ結構です
じゃあ結構です
903デフォルトの名無しさん
2018/01/12(金) 08:14:19.27 >>899
恥ずかしガンなって
恥ずかしガンなって
904デフォルトの名無しさん (ワッチョイ 8ae7-0PCX)
2018/01/12(金) 22:48:03.44ID:bn5FfgmT0 メンバがint2つくらいだとコピー渡しにするか参照渡しにするかちょっと悩む
int4つくらいまでならキャッシュの関係でコピーのほうが早いとか聞いたことあるけど本当なのかね
int4つくらいまでならキャッシュの関係でコピーのほうが早いとか聞いたことあるけど本当なのかね
905デフォルトの名無しさん (ワッチョイ 3d7f-QpsD)
2018/01/12(金) 22:50:47.10ID:iYjzTsi20 FF15ではベクトルクラスはコピーにしたら劇的に早くなったと言っていた
906はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5e6f-QpsD)
2018/01/13(土) 01:03:55.02ID:SxvD86sf0 ゲーム機は尖ったアーキテクチャだったりするから……。
やってみないとわからん。
やってみないとわからん。
907デフォルトの名無しさん (ワッチョイ 7db3-KClg)
2018/01/13(土) 11:47:10.72ID:ARtU5FzH0 いやゲーム屋なら当たり前の話だよ
IntelのCPUだってSSEあるし、__m128は出来るだけ値渡しした方がいいはず
(もちろんインライン展開された場合は除く
IntelのCPUだってSSEあるし、__m128は出来るだけ値渡しした方がいいはず
(もちろんインライン展開された場合は除く
908デフォルトの名無しさん (ワッチョイ b5b3-QpsD)
2018/01/13(土) 12:22:15.14ID:nudx6UkM0 >>905
ソース教えて欲しい
ソース教えて欲しい
909デフォルトの名無しさん (ワッチョイ 3d7f-QpsD)
2018/01/13(土) 12:24:13.94ID:A7bueCBw0910デフォルトの名無しさん (ワッチョイ b5b3-QpsD)
2018/01/13(土) 12:34:35.23ID:nudx6UkM0 >>909
ありがとうございます
ありがとうございます
911デフォルトの名無しさん (ワッチョイ 8abd-kJSF)
2018/01/13(土) 13:06:59.87ID:jbKISc2y0 インライン展開されたら値渡しだろうが参照渡しだろうが(あんま)関係無いんじゃ…
※ 参照と不十分なインライン展開が重なったときmemory aliasingによる最適化の阻害の危険性がちょっと増すぐらい
※ 参照と不十分なインライン展開が重なったときmemory aliasingによる最適化の阻害の危険性がちょっと増すぐらい
912デフォルトの名無しさん (ワッチョイ 6d04-lXUw)
2018/01/13(土) 21:20:30.95ID:1X9BcJ9h0 クラスの継承について質問です。
スーパークラス(Super)を継承したサブクラス(Sub)内にて
スーパークラスの関数func()をoverrideしています。
このサブクラスのfunc()の中で、
スーパークラスのfunc()をそのまま呼び出したいときは、
このようにする方法がありますよね。
void Sub::func(){
____Super::func();
____/*その他の処理*/
}
しかし、これはサブクラス側の自由であり、
スーパークラスのfuncを実行しないこともできます。
そこで、サブクラスのすべてのfunc()で
スーパークラスのfunc()が必ず処理されるように強制したいです。
これは可能でしょうか?
文字通りではなく、擬似的な手段で構いません。
よろしくお願いします。
スーパークラス(Super)を継承したサブクラス(Sub)内にて
スーパークラスの関数func()をoverrideしています。
このサブクラスのfunc()の中で、
スーパークラスのfunc()をそのまま呼び出したいときは、
このようにする方法がありますよね。
void Sub::func(){
____Super::func();
____/*その他の処理*/
}
しかし、これはサブクラス側の自由であり、
スーパークラスのfuncを実行しないこともできます。
そこで、サブクラスのすべてのfunc()で
スーパークラスのfunc()が必ず処理されるように強制したいです。
これは可能でしょうか?
文字通りではなく、擬似的な手段で構いません。
よろしくお願いします。
913デフォルトの名無しさん (ワッチョイ 6d04-lXUw)
2018/01/13(土) 21:22:05.60ID:1X9BcJ9h0 ↑誤字修正致します。
☓そこで、サブクラスのすべてのfunc()で
○そこで、すべてのサブクラスのfunc()で
申し訳ございません。
☓そこで、サブクラスのすべてのfunc()で
○そこで、すべてのサブクラスのfunc()で
申し訳ございません。
914はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5e6f-QpsD)
2018/01/13(土) 21:27:01.54ID:SxvD86sf0 スーパークラスとかサブクラスとか言ってるやつにイラッとするのが C++er
915片山博文MZ ◆T6xkBnTXz7B0 (スププ Sd0a-TJOf)
2018/01/13(土) 21:35:37.12ID:P0Ulq8gud メソッドチェーンというものを自作すればコントロール可能だが、ややこしい上にオーバーヘッドがある。
916片山博文MZ ◆T6xkBnTXz7B0 (スププ Sd0a-TJOf)
2018/01/13(土) 21:42:39.62ID:P0Ulq8gud ごめん、間違った。
メソッドチェーンじゃなくてC#デリゲート。
メソッドチェーンじゃなくてC#デリゲート。
917デフォルトの名無しさん (ワッチョイ 6d04-lXUw)
2018/01/13(土) 21:45:31.67ID:1X9BcJ9h0918デフォルトの名無しさん (ワッチョイ 6d04-lXUw)
2018/01/13(土) 21:49:30.82ID:1X9BcJ9h0919デフォルトの名無しさん (ワッチョイ 0aa8-XiqC)
2018/01/13(土) 22:24:25.09ID:B4wYryLR0 NVIでぐぐれや
920デフォルトの名無しさん (ワッチョイ ea34-yppE)
2018/01/13(土) 22:56:11.51ID:6aei/M/30 Java厨絶滅成就(・人・)ナムナム
921はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5e6f-QpsD)
2018/01/13(土) 23:27:00.62ID:SxvD86sf0 >>917
スーパーというのはある集合を内包する、より大きな集合。 サブというのはある集合の一部の集合。
このとき、オブジェクト指向におけるクラスというのはインスタンスの集合とみなして、
サブクラスはスーパークラスの一部の集合とする考え方によってスーパー/サブと言ってる。
しかし、あるクラスをクラスが持つ機能 (メソッド) の集合と考えるとスーパー/サブが逆転する。
これはわかり難くて混乱の元。
という教訓に基づき基底クラス (base class) と派生クラス (derived class) という用語を C++ では採用した。
ちなみに C++ にはサブオブジェクトという用語はあって、
これはあるオブジェクトのデータメンバや基底のオブジェクトのこと。
スーパーというのはある集合を内包する、より大きな集合。 サブというのはある集合の一部の集合。
このとき、オブジェクト指向におけるクラスというのはインスタンスの集合とみなして、
サブクラスはスーパークラスの一部の集合とする考え方によってスーパー/サブと言ってる。
しかし、あるクラスをクラスが持つ機能 (メソッド) の集合と考えるとスーパー/サブが逆転する。
これはわかり難くて混乱の元。
という教訓に基づき基底クラス (base class) と派生クラス (derived class) という用語を C++ では採用した。
ちなみに C++ にはサブオブジェクトという用語はあって、
これはあるオブジェクトのデータメンバや基底のオブジェクトのこと。
922デフォルトの名無しさん
2018/01/14(日) 00:30:48.99 >>921
> ちなみに C++ にはサブオブジェクトという用語はあって、
> これはあるオブジェクトのデータメンバや基底のオブジェクトのこと。
へー、スーパークラス=基底クラスで、基底のオブジェクト=サブオブジェクトなのか
これがスーパー/サブの逆転ってやつか
確かにわかりづらいね
> ちなみに C++ にはサブオブジェクトという用語はあって、
> これはあるオブジェクトのデータメンバや基底のオブジェクトのこと。
へー、スーパークラス=基底クラスで、基底のオブジェクト=サブオブジェクトなのか
これがスーパー/サブの逆転ってやつか
確かにわかりづらいね
923デフォルトの名無しさん (ワッチョイ ea34-yppE)
2018/01/14(日) 00:33:39.99ID:ng7CbKaO0 スーパーとかダセェ
924デフォルトの名無しさん (ワッチョイ 8abd-kJSF)
2018/01/14(日) 01:04:12.68ID:6MYOWaJx0 VC++だと派生クラスBarから基底クラスFooのメソッドfuncを
__super::func()
という風に
__super
キ──ワ──ドが使えるんじゃ!
__super::func()
という風に
__super
キ──ワ──ドが使えるんじゃ!
925デフォルトの名無しさん (ワッチョイ 8ae7-0PCX)
2018/01/14(日) 05:55:30.36ID:06kwM4S00 privateなvirtual funcImpl()をカスタマイズポイントとして派生クラスに自由にオーバーライドさせて
基底クラスのpublicなfunc()で>>912で言うところのSuper::func()相当の処理してからfuncImpl()を呼ぶ
(func()自体はnon-virtual)
ってのがまあ常套手段だと思うけどそれだと困る?
基底クラスのpublicなfunc()で>>912で言うところのSuper::func()相当の処理してからfuncImpl()を呼ぶ
(func()自体はnon-virtual)
ってのがまあ常套手段だと思うけどそれだと困る?
926デフォルトの名無しさん (ワッチョイ ad7e-UJUP)
2018/01/14(日) 06:37:11.95ID:N+BeAo4b0 >>924
多重継承してるとあかんけどな
多重継承してるとあかんけどな
927デフォルトの名無しさん (ワッチョイ 6a12-0PCX)
2018/01/14(日) 10:01:41.75ID:Z2heVtXU0 >>922
多分ちげーんだろーな
C++のサブオブジェクトはサブリミナルとかのサブだろ
オブジェクトに潜んでる何かだろ
つい最近にもあった潜性/顕性の潜性の方だろ
無理に対義語作るならジス(this)・オブジェクトかメイン・オブジェクトじゃねえの
多分ちげーんだろーな
C++のサブオブジェクトはサブリミナルとかのサブだろ
オブジェクトに潜んでる何かだろ
つい最近にもあった潜性/顕性の潜性の方だろ
無理に対義語作るならジス(this)・オブジェクトかメイン・オブジェクトじゃねえの
928デフォルトの名無しさん (ワッチョイ 8ae7-0PCX)
2018/01/14(日) 12:55:55.66ID:06kwM4S00 サブセットのサブだろ
あるオブジェクトの一部分がサブオブジェクト
対義語はやっぱりスーパーだよ
あるオブジェクトの一部分がサブオブジェクト
対義語はやっぱりスーパーだよ
929デフォルトの名無しさん (ワッチョイ ad7e-UJUP)
2018/01/14(日) 13:03:04.48ID:N+BeAo4b0 部分オブジェクトの反対語をスーパーオブジェクトとは言わん
930デフォルトの名無しさん (ワッチョイ 8ae7-0PCX)
2018/01/14(日) 13:14:31.73ID:06kwM4S00 でもサブセットの反対はスーパーセットだろ
931デフォルトの名無しさん (ワッチョイ 4923-IjLh)
2018/01/14(日) 13:32:41.21ID:0BOIhrZQ0 subset, subhuman などに使われる前置詞 sub だろ
語義は「不完全な」だ
語義は「不完全な」だ
932デフォルトの名無しさん
2018/01/14(日) 14:17:12.73 じゃあ対義語はconcreteか
933デフォルトの名無しさん (ワッチョイ 8abd-kJSF)
2018/01/14(日) 15:03:36.89ID:6MYOWaJx0 集合は要素の重複を認めないのでスーパーオブジェクトとかサブオブジェクトとか言う方が異端なのでは…
934デフォルトの名無しさん (ワッチョイ 8abd-kJSF)
2018/01/14(日) 15:06:32.87ID:6MYOWaJx0 英語圏の方々の言語感覚は正直ワカランこともあるが
「具体的な」(Concrete)と「完全な」(Complete)は多分使い分けられれているのではないか
「具体的な」(Concrete)と「完全な」(Complete)は多分使い分けられれているのではないか
935デフォルトの名無しさん (ワッチョイ 8abd-kJSF)
2018/01/14(日) 15:11:45.36ID:6MYOWaJx0 >>926
クラスcがクラスaの単一継承なら
{ クラスcに属するオブジェクト } ⊂ { クラスaに属するオブジェクト } ・・・ (1)
なのでa::func()はcから見て__super::func()で正しいが、
クラスcがクラスaとbの間の子なら、(1)および
{ クラスcに属するオブジェクト } ⊂ { クラスbに属するオブジェクト } ・・・ (2)
はどっちも成立しないから__superキーワードが使えないのはある意味当然で整合的と言える、
クラスcがクラスaの単一継承なら
{ クラスcに属するオブジェクト } ⊂ { クラスaに属するオブジェクト } ・・・ (1)
なのでa::func()はcから見て__super::func()で正しいが、
クラスcがクラスaとbの間の子なら、(1)および
{ クラスcに属するオブジェクト } ⊂ { クラスbに属するオブジェクト } ・・・ (2)
はどっちも成立しないから__superキーワードが使えないのはある意味当然で整合的と言える、
936デフォルトの名無しさん (ワッチョイ 8abd-kJSF)
2018/01/14(日) 15:30:00.21ID:6MYOWaJx0 スマン訂正
クラスcがクラスaとbの間の子(で公開継承)なら、(1)と(2)が両方成立するんだったorz
(cのインスタンスはaのインスタンスとしてもbのインスタンスとしても扱える
ついでに補足で、>>933は「包含関係の意味でスーパーとかサブとか言うなら」異端という意味
クラスcがクラスaとbの間の子(で公開継承)なら、(1)と(2)が両方成立するんだったorz
(cのインスタンスはaのインスタンスとしてもbのインスタンスとしても扱える
ついでに補足で、>>933は「包含関係の意味でスーパーとかサブとか言うなら」異端という意味
937デフォルトの名無しさん (ワッチョイ ad6a-UJUP)
2018/01/14(日) 21:03:41.51ID:66CfjFh30 >>931
incompleteとは違うね
incompleteとは違うね
std::set にて std::set<int> に特化して実装しようとしていますが、
ここで private メンバーである iterator positionToInsert(int n) を記述しようとして、はまっています
iterator posisionToInsert(int n) :
n を挿入するべき内部テーブルの位置(イテレータ)を返す
n がすでに set にあったら nullptr を返す
としたかったんですが
・nullptr を iterator に代入できない
・そもそも コンテナ.end() が nullptr だ(無理にキャストしてみて分かった)…@
返り値を複数にするしかないのかな…
std:set.insert() も pair を返すみたいですし
@は規格で決まっているのでしょうか?処理系依存でしょうか?
https://teratail.com/questions/25576
ここで private メンバーである iterator positionToInsert(int n) を記述しようとして、はまっています
iterator posisionToInsert(int n) :
n を挿入するべき内部テーブルの位置(イテレータ)を返す
n がすでに set にあったら nullptr を返す
としたかったんですが
・nullptr を iterator に代入できない
・そもそも コンテナ.end() が nullptr だ(無理にキャストしてみて分かった)…@
返り値を複数にするしかないのかな…
std:set.insert() も pair を返すみたいですし
@は規格で決まっているのでしょうか?処理系依存でしょうか?
https://teratail.com/questions/25576
939デフォルトの名無しさん (ワッチョイ 5d8a-QpsD)
2018/01/15(月) 00:07:45.76ID:akdFGtdY0 iteratorはポインタちゃうで
940デフォルトの名無しさん (ワッチョイ ea34-yppE)
2018/01/15(月) 00:52:09.62ID:p80Tlp9s0 変なメンバ関数つくるよりfind使っておけよトーシロー
理解できないなら余計な機能追加はするな
余計にわからなくしてプログラムを目茶苦茶にするな
理解できないなら余計な機能追加はするな
余計にわからなくしてプログラムを目茶苦茶にするな
941デフォルトの名無しさん (ワッチョイ ea34-yppE)
2018/01/15(月) 00:54:40.48ID:p80Tlp9s0 findじゃないなlower_boundで位置は把握できるだろこのハゲー
942片山博文MZ ◆T6xkBnTXz7B0 (ワッチョイ b5b3-TJOf)
2018/01/15(月) 01:03:25.78ID:egVCSXHP0 std::setは挿入する位置を気にしないはずだが。設計思想が間違っている。
943デフォルトの名無しさん (ワッチョイ c576-iyAC)
2018/01/15(月) 08:06:37.84ID:ss1wTrUG0 おれば後ろより前に挿入する方が好き
945デフォルトの名無しさん (ワッチョイ 4923-IjLh)
2018/01/15(月) 11:18:44.64ID:WC62iZPf0946デフォルトの名無しさん (ブーイモ MM8e-BVdN)
2018/01/15(月) 14:02:37.88ID:2ZVCG19QM >>939-942,945-946
コメントありがとうございます
>>945
はい、結果と成否をわけることにしました
http://mevius.2ch.net/test/read.cgi/tech/1434079972/33
コメントありがとうございます
>>945
はい、結果と成否をわけることにしました
http://mevius.2ch.net/test/read.cgi/tech/1434079972/33
948デフォルトの名無しさん (ワッチョイ 3946-TSXj)
2018/01/15(月) 22:43:32.66ID:9+FUM4nJ0 class Foo{
void function(){
hoge.exe();
}
private:
Hoge hoge;
}
と
class Foo{
void function(Hoge& hoge){
hoge.exe();
}
}
どっちが最適化かかりやすい?
void function(){
hoge.exe();
}
private:
Hoge hoge;
}
と
class Foo{
void function(Hoge& hoge){
hoge.exe();
}
}
どっちが最適化かかりやすい?
949デフォルトの名無しさん (ワッチョイ b623-aOXM)
2018/01/15(月) 22:51:21.17ID:aACM4QK20 ほぼ変わらないと思うけど
スタックに積まない分前者かなと思う
スタックに積まない分前者かなと思う
950デフォルトの名無しさん (ワントンキン MM7a-Rz0Q)
2018/01/15(月) 23:37:09.62ID:GwTCehVfM ただのラッパなら自由関数にしれ
951デフォルトの名無しさん (ワッチョイ 8acb-dIle)
2018/01/16(火) 00:21:59.76ID:683mXkIO0 >>948
情報処理における罪の多くは最適化の名のもとでなされる。
そこはメンテナンス性の高い方を選ぶべき。
これから何千行のコードを書こうとしてるのか知らないけど、いちいちそんなことに頭使ってたら禿げるよ。
情報処理における罪の多くは最適化の名のもとでなされる。
そこはメンテナンス性の高い方を選ぶべき。
これから何千行のコードを書こうとしてるのか知らないけど、いちいちそんなことに頭使ってたら禿げるよ。
952デフォルトの名無しさん (ワッチョイ add5-UJUP)
2018/01/16(火) 06:29:10.56ID:zATeRHxg0 データメンバへのアクセスはthis経由なので
ポインタにオフセットを書けて逆参照という動作になる
左辺値参照の場合はオフセットなしで逆参照
いずれにせよ仮引数を受け取るという点は同じ動作だ
最適化という観点からはデータメンバはrestrictが付いているようなもので
若干有利ではないかな
ただしデータメンバの場合は全ての非静的メンバ関数が関与する可能性があり
仮引数の場合は当該関数のみというアクセス範囲の違いがあるので
最適化する以前の、基本的な設計で選ぶべきだろう
ポインタにオフセットを書けて逆参照という動作になる
左辺値参照の場合はオフセットなしで逆参照
いずれにせよ仮引数を受け取るという点は同じ動作だ
最適化という観点からはデータメンバはrestrictが付いているようなもので
若干有利ではないかな
ただしデータメンバの場合は全ての非静的メンバ関数が関与する可能性があり
仮引数の場合は当該関数のみというアクセス範囲の違いがあるので
最適化する以前の、基本的な設計で選ぶべきだろう
953デフォルトの名無しさん (ワッチョイ a99f-IxFb)
2018/01/16(火) 06:49:48.40ID:TUkAINts0 messageboxで変数は表示できますか。
954デフォルトの名無しさん (ワッチョイ add5-UJUP)
2018/01/16(火) 07:53:30.35ID:zATeRHxg0 できるけど、モーダルでもモードレスでもかなりうぜえぞ
template <typename T>
void display(T const& variable)
{
stringstream ss;
ss << variable;
MessageBox(NULL, ss.str().data(), typeid(variable).name(), MB_OK);
}
template <typename T>
void display(T const& variable)
{
stringstream ss;
ss << variable;
MessageBox(NULL, ss.str().data(), typeid(variable).name(), MB_OK);
}
955デフォルトの名無しさん (ワッチョイ e531-BgxS)
2018/01/16(火) 17:35:22.56ID:GcKo/GK70 質問させてください。VS2008で仮想継承使っていたら以下の警告が出たんですが、警告が出ないようにするにはどうすればいいでしょうか?
warning C4250: 'CHoge' : 2 つ以上のメンバが同じ名前を持っています。'CTest1::CTest1::Draw' から継承します。
----------------------
class ITest1 {
public: virtual void Draw() = 0;
};
class CTest1 : virtual public ITest1 {
public: virtual void Draw() { printf("Draw\n"); }
};
class ITest2 : virtual public ITest1 {
public: virtual void Func() = 0;
};
class CHoge : public ITest2, public CTest1 {
public: virtual void Func() {}
};
warning C4250: 'CHoge' : 2 つ以上のメンバが同じ名前を持っています。'CTest1::CTest1::Draw' から継承します。
----------------------
class ITest1 {
public: virtual void Draw() = 0;
};
class CTest1 : virtual public ITest1 {
public: virtual void Draw() { printf("Draw\n"); }
};
class ITest2 : virtual public ITest1 {
public: virtual void Func() = 0;
};
class CHoge : public ITest2, public CTest1 {
public: virtual void Func() {}
};
956デフォルトの名無しさん (ワッチョイ add5-UJUP)
2018/01/16(火) 18:00:29.71ID:zATeRHxg0 VS2017ではデフォでは何も言ってこず
/W4にするとC4250が出る
warningだろ? errorは直すしかないが
warningは内容を読んで理解したうえでどうするかを判断するものだ
必ず消そうと思うな、キリねえぞ
意味を理解しないからdisられたと思っちまうんだよ
/W4にするとC4250が出る
warningだろ? errorは直すしかないが
warningは内容を読んで理解したうえでどうするかを判断するものだ
必ず消そうと思うな、キリねえぞ
意味を理解しないからdisられたと思っちまうんだよ
957デフォルトの名無しさん (ワッチョイ add5-UJUP)
2018/01/16(火) 18:02:50.15ID:zATeRHxg0 どうしても「消すこと」が絶対ならこれやっとけ
#pragma warning(disable : 4250)
#pragma warning(disable : 4250)
958デフォルトの名無しさん
2018/01/16(火) 18:08:17.81 >>955
なんでITest2を仮想継承してないの?
なんでITest2を仮想継承してないの?
959デフォルトの名無しさん (スプッッ Sdea-IjLh)
2018/01/16(火) 18:11:37.58ID:JbjA4DiDd この場合どっちを継承するとかの問題もないし
普通にこっちにも virtual つければいいだけだと思うが vc だと違うのか?
>>955
>class CHoge : public ITest2, public CTest1 {
>public: virtual void Func() {}
>};
こう
class CHoge : virtual public ITest2, virtual public CTest1 {
public: virtual void Func() {}
};
普通にこっちにも virtual つければいいだけだと思うが vc だと違うのか?
>>955
>class CHoge : public ITest2, public CTest1 {
>public: virtual void Func() {}
>};
こう
class CHoge : virtual public ITest2, virtual public CTest1 {
public: virtual void Func() {}
};
960デフォルトの名無しさん (ワッチョイ add5-UJUP)
2018/01/16(火) 18:30:21.88ID:zATeRHxg0 おまえら質問者に教えて貰うあべこべになりそうだなw
961デフォルトの名無しさん (ワッチョイ ea34-yppE)
2018/01/16(火) 18:55:59.62ID:Ngn2q6Fj0 iTest2のDraw()が零でCTest1のDraw()が定義されているからそりゃ衝突する罠
962デフォルトの名無しさん (ワッチョイ e531-BgxS)
2018/01/16(火) 20:35:10.19ID:GcKo/GK70963デフォルトの名無しさん (ワッチョイ 2a98-4pcN)
2018/01/17(水) 12:08:14.47ID:iC3iQa/y0 boost::spirit::qiで
boost::spirit::qi::rule<std::string::iterator, std::string()> hogehoge;
としてとき std::string() のようにかっこ付でテンプレート引数に与えていますが
このかっこ付で型名をあたえる方法はどのように活用できますか?(一般論として
boost::spirit::qi::rule<std::string::iterator, std::string()> hogehoge;
としてとき std::string() のようにかっこ付でテンプレート引数に与えていますが
このかっこ付で型名をあたえる方法はどのように活用できますか?(一般論として
レス数が950を超えています。1000を超えると書き込みができなくなります。
ニュース
- 【おこめ】「有能だったんじゃ」おこめ券で批判殺到の鈴木農水大臣…ネットでは前任の“進次郎再評価” ★2 [ぐれ★]
- 「暖房が使えない」「食費が高くて子どもの栄養が…」 物価高に苦しむ子育て世帯、政府に期待する支援は ★2 [蚤の市★]
- オイルマッサージ施術中20代女性にわいせつ行為か セラピストの男(30)を再逮捕 余罪複数とみて警視庁が捜査 [どどん★]
- 内閣支持、微減59.9% 5割超が補正予算評価 時事通信世論調査 [どどん★]
- 【中国外務省】日本への渡航自粛を再度呼びかけ 今度は「地震発生」を理由に [ぐれ★]
- 日本語が話せない「外国籍」の子が急増中、授業がストップ、教室から脱走も…先生にも大きな負担「日本語支援」追いつかず★3 [七波羅探題★]
- 高市内閣の支持率、下落wwwwwwwwwww [834922174]
- お前ら嫁や彼女にセックス中にどんな声がけしてる? [369521721]
- Vtuber「人気アニメとコラボします!」←これでVが叩かれるの謎じゃね
- Xでフォローしてきた人をフォロバして相手のフォロー解除するのが趣味なんだが
- あー…女児のつるつるまんまん舐め回してえなあ…
- 愛国者「徴兵されるのは嫌。でも敵が侵略してきたら考えます」 [834922174]
