C言語なら俺に聞け 151

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ cf8f-fy95)
垢版 |
2019/04/02(火) 11:23:37.62ID:SQXqRaAc0
!extend:checked:vvvvv:1000:512
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf

C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/

JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2019/05/21(火) 19:19:14.41ID:IJ+i04U80
こんな感じでいいのか?

#include <stdio.h>
int main(void) {
FILE* fp;
fp = fopen("Test.txt","w");
fprintf(fp,"hoge\n");
fseek(fp,-1,SEEK_CUR); /* 改行2byteなら-2 */
fprintf(fp,"fuga\n");
fclose(fp);
return 0;
}
2019/05/21(火) 19:53:55.55ID:UPiNM42a0
質問者が知りたい情報とは違うので、スルー推奨かもですが。

もし自分が、同じことをやれ、と言われたら。
「改行を含んだ文字列」を、「改行」と「それ以外の文字列」の2つに分けて、別々に出力しようとするかなあ。
ループの回数を変える必要はなくて。イメージとしては

for() ※行単位のループ
{
if(最初の行でなければ) fprintf で「改行」を出力

fprintf で「それ以外の文字列」を出力
}
fprintf で「別の文を出力」
2019/05/21(火) 19:58:03.98ID:kdkwqODuM
>>595
bool First = true;
for( … ){
if(First){
First = false;
} else {
fprintf("¥n");
}
fprintf( … );
}
2019/05/21(火) 19:58:35.62ID:kdkwqODuM
あっ、被ったや
2019/05/21(火) 20:07:13.38ID:IJ+i04U80
ファイルが標準出力等でvt100互換端末であれば。
#include <stdio.h>
#include <string.h>
int main(void) {
int i;
i=fprintf(stdout,"hogehogehogehoge\n");
if (0) fprintf(stdout,"\E[01Afuga%*c\n",i,' '); /* これか? */
else fprintf(stdout,"\E[01A\E[%02dCfuga\n",i-strlen("\n")); /* あるいはこれか? */
return 0;
}

cmdとかdos窓なら無理?
603デフォルトの名無しさん (ササクッテロル Sp88-Qul6)
垢版 |
2019/05/21(火) 20:22:57.69ID:G/IUf+gXp
>>596-602
皆様回答ありがとうございます。
ファイルを扱っているので、fseekで戻す方法を試してみようと思います。
2019/05/21(火) 20:31:17.43ID:JOJ6V6qzd
プログラムいじられるなら、改行出す方をどうにかした方が良さそうだが
2019/05/21(火) 20:31:52.25ID:8vKfOnx40
ansi.sysを組み込めばVT100互換エスケープシーケンスが
という昔話…と思ったが、ググったらvistaまであったんだな驚き
Windows 10 Threshold 2(10.0.1058)ではコマンドプロンプトでANSI/VT100互換表示が可能に
というスラドの記事も出た
606デフォルトの名無しさん (アウアウウー Sa83-RNyv)
垢版 |
2019/05/21(火) 20:52:46.26ID:BVi2WQ22a
最後に改行出すんじゃなくて最初に改行出すようにすれば良いだけでは?
一番最初の行だけは最初に出さなければ良いだけ。
バッファリングされて出力されないのが嫌なら行末でfflush()する。
2019/05/21(火) 21:47:10.75ID:n1jvW3Ih0
>>606
>>599-600
608デフォルトの名無しさん (ワッチョイ 9602-XAPB)
垢版 |
2019/05/21(火) 22:06:40.11ID:Y+BS98b80
>>607
おお。既にあった。
さっきスマホで見てて気付かなかった。
609デフォルトの名無しさん (ワッチョイ 1e01-Qul6)
垢版 |
2019/05/21(火) 22:09:47.12ID:JtLDtEYt0
>>604-607
603です。>>600の意味をちゃんとわかってませんでしたが、>>606の方のレスでわかりました。
>>600の方が安全な気がするのでそちらを検討します。
610デフォルトの名無しさん (ワッチョイ dfb9-9b2Z)
垢版 |
2019/05/24(金) 09:00:19.45ID:h3dkW7YJ0
C言語はクラスが無い。
それは実際どれくらい問題になりますか?

昔C使ってたけど、本格的な抽象的設計をやってたわけじゃなくて、
最近Java使っててそういうのをやりだしたけど、
今思い返してみるとC言語はクラスや継承や多態性が無いから
かなり厳しい言語なんじゃないかな、と思ったんです。

メジャーなカーネルがCで作られてるという事実に驚愕します。
クラス無しで大規模開発は不可能としか思えません。
それどころか、1アルゴリズムの実装でもクラスは有用だと思うんですが。

最近、NimとかRustのようなCを代替するかもしれない勢いのある言語があります。
そういう言語はかなり抽象的な設計が可能です。
そういうのと比べると、小さなデバイスドライバみたいなものはCでいいだろうけど、
大規模開発におけるCはかなり無理があるんじゃないかな?と

そうでもないものですか?
2019/05/24(金) 09:04:22.51ID:a6wIXg41a
まあファイルがクラスと同じだし。
継承はしづらいけど、そんなもん使ったらC++でもむしろ見通し悪くなるでしょ?
2019/05/24(金) 10:11:20.70ID:M2ZwKTAn0
最大のデバイスドライバがOSのカーネルなんじゃねえの
そしてそれがC言語の限界
613デフォルトの名無しさん (ワッチョイ dfb9-9b2Z)
垢版 |
2019/05/24(金) 10:43:06.36ID:h3dkW7YJ0
Linuxカーネルは2100万行を超えているそうなので
たぶん地球上でもっとも大規模な開発の1つです。
614デフォルトの名無しさん (ワッチョイ bf8c-GX6Y)
垢版 |
2019/05/24(金) 11:21:47.36ID:0dR+L/D60
責任ある人は気がくるっているじゃない。
615デフォルトの名無しさん (アウアウウー Saab-EYzY)
垢版 |
2019/05/24(金) 12:25:59.56ID:Cw+6mW4za
Cでもオブジェクト指向的に考えて作ることは可能。構造体へのポインタまたは情報を区別する番号などを渡してその中身に基づいて処理する関数作ればいいので。
ファイルアクセスとかは作りがそうなってるよね。
2019/05/24(金) 12:32:21.84ID:M3xcEept0
クラスはコンストラクタ/デストラクタは活用したけど
継承で面倒になって、ちょっと便利な関数付き構造体としてしか設計したことない。
2019/05/24(金) 12:35:03.01ID:C+5joBz9M
C言語ではオブジェクト指向も関数型プログラミングもできる。その下位レイヤーだから。
面倒臭いけど。
2019/05/24(金) 12:50:51.48ID:8pSuDyEhM
>>613
デバドラとかが山ほどあるだけでコア部分はそんなにたいしたことないよ
2019/05/24(金) 12:53:08.72ID:8pSuDyEhM
>>610
構造体に関数ポインタ入れたりすれば継承も多態も可能
書くのが面倒ってだけの話
モジュールを適切に分割すれば個々の開発部分はそんなにでかくならないし
620デフォルトの名無しさん (アウアウウー Saab-EYzY)
垢版 |
2019/05/24(金) 12:59:14.48ID:Cw+6mW4za
まあしかしC++は複雑怪奇な状態になったような感じがするのでなんか別の言語でオブジェクト指向やった方が良いような気がする。
2019/05/24(金) 13:49:11.26ID:FIKXvkBI0
Javaがとてもシンプルな言語に見えてくる
2019/05/24(金) 14:27:11.63ID:YkjJvwKvd
linux kernelなんておもくそオブジェクト指向的な構造だろ
2019/05/24(金) 19:13:34.31ID:E0qJKDus0
関係ないけどOOPが流行り始めた頃に「WindowsのUIはオブジェクト指向だ」と言ってたやつを思い出した。
2019/05/24(金) 19:26:36.07ID:omgaeJxY0
目指していた方向はそうだったと思う
2019/05/24(金) 20:26:08.87ID:0N6+tWvP0
>>615
>Cでもオブジェクト指向的に考えて作ること
あくまでも「オブジェクト指向『的』」であることに注意すること
C ではオブジェクト指向を実現できない(断言)
2019/05/24(金) 20:27:08.05ID:0N6+tWvP0
>>617
>C言語ではオブジェクト指向も関数型プログラミングもできる

C ではオブジェクト指向はできない(断言)
継承をCでどのように記述するのでしょうか?
2019/05/24(金) 20:27:59.68ID:0N6+tWvP0
>>622
>linux kernelなんておもくそオブジェクト指向的な構造だろ

あくまでも「オブジェクト指向『的』」であってオブジェクト指向そのものではありません(断言)
628デフォルトの名無しさん (アウアウウー Saab-EYzY)
垢版 |
2019/05/24(金) 20:41:47.14ID:1FXcUtRQa
いやできなくはないよ。何せC++は元々はCへのコンバータだったしな。C++のソースを読んでC言語に変換して後のことはCコンパイラに任せてたんだよ。それが初期のC++。

もちろんCは言語そのものがオブジェクト指向をサポートしてないから人間がそれをやろうとするととても面倒な事になるけどな。
2019/05/24(金) 20:51:16.47ID:E0qJKDus0
そんなん言い始めたらアセンブラでもオブジェクト指向プログラミングできることになっちゃう。
言語としてOOPがサポートされてなきゃ認められないでしょ。
2019/05/24(金) 21:00:32.57ID:0N6+tWvP0
>>628
>C++のソースを読んでC言語に変換して後のことはCコンパイラに任せてたんだよ。それが初期のC++。
C++ から C へのトランスパイラが存在したからといって、C にてオブジェクト指向(的ではなくそのものずばり)なプログラミングができるわけではありません
C++ のコンパイラが存在するからといって機械語が OO でないのと同じです、まず、

C++ https://ideone.com/vAp2Sj

に対応する C のコードを示してください
2019/05/24(金) 21:01:09.07ID:0N6+tWvP0
>>629
>言語としてOOPがサポートされてなきゃ認められないでしょ。

激しく同感いたします!
2019/05/24(金) 21:12:51.85ID:ZwmHdTYl0
>>610
全く問題にならない
classというキーワードがなくても
コードを書く者の考え方次第でカプセル化や継承はできる
FILE構造体がその例だ
多態性がないというのは、おまえさんの認識不足で
関数ポインタでそんなものはすぐに実現できる
そういう認識不足があるからこそ
メジャーなカーネルをなぜ書けたかが理解できないのだ
2019/05/24(金) 21:15:04.81ID:ZwmHdTYl0
>>630
対応するCのコードを示せるやつがいたら、おまえどうする?
朝8時の品川駅のホームでストリーキングでもするか?
2019/05/24(金) 21:24:37.67ID:QPLeHwR8a
まあ継承なんてオブジェクト指向と関係ないよ
2019/05/24(金) 21:45:54.65ID:0N6+tWvP0
>>632
>classというキーワードがなくても
>コードを書く者の考え方次第でカプセル化や継承はできる

C ではカプセル化はできても継承は不可能ですよ
2019/05/24(金) 21:46:59.73ID:0N6+tWvP0
>>633
>対応するCのコードを示せるやつがいたら、おまえどうする?
あなたができないことをそんなにアピールしなくてもいいと思いますよ
2019/05/24(金) 21:56:28.68ID:wwZ4gkZH0
仮想関数テーブルの実装方法について語るスレはここですか?
2019/05/24(金) 22:01:07.63ID:ZwmHdTYl0
>>635
いーや、できる
おまえさん禿本やリップマンくらい読んだか?

裸踊りを賭す自信もねえやつがいきがってんなよ
2019/05/24(金) 22:02:14.93ID:ZwmHdTYl0
>>637
いいぜ
おら、来いや
2019/05/24(金) 22:06:22.36ID:/xfbOr910
>>630
https://ideone.com/omqT5r
2019/05/24(金) 22:17:20.89ID:0N6+tWvP0
>>638
ではストロヴストルップやリップマンはどういっているのか、ここに引用していただけますか?
あらかじめいっておきますが、引用はできない、なぜならば、そんな内容をストロヴストルップもリップマンも書いていないのだから
2019/05/24(金) 22:18:09.05ID:TMKOHW7N0
>>625-627, >>629
オブジェクト指向と言う概念と実装の区別がついてないんだな
低能なプログラマーによくある行動w

例えばLinuxで言えばリダイレクトなんて言うのはもろオブジェクト指向な機能だよね
Applicatlon > xxx
ってやればxxxがファイルならApplicatlon が出力したデータをファイルに書き込むし、xxxが端末なら端末にデータを表示するし、xxxがプリンタならデータを印刷する
Applicatlonは出力先が何であるかを気にする必要はない
もちろんLinuxはC言語でこれを実現してるしより面倒だろうけど当然アセンブラで実装することも可能
2019/05/24(金) 22:21:05.39ID:0NhXAFL60
概念ならFILE構造体とそれの操作関数群
2019/05/24(金) 22:21:27.40ID:0N6+tWvP0
>>640
>typedef struct C
>{
> A ThisA;
> B ThisB;
> int c;
>} C;

これは委譲であって継承ではありません。私は >>626 で「Cでは継承はできない」と主張しており、これを否定するために委譲は使えません
2019/05/24(金) 22:23:27.35ID:0N6+tWvP0
>>642
それは smalltalk 的な OO であって C++ の OO の概念とは多少食い違うと思います
2019/05/24(金) 22:24:05.41ID:0NhXAFL60
コンストラクタとデストラクタの機構だけは欲しいと思ったことがしばしば
2019/05/24(金) 22:24:31.62ID:0N6+tWvP0
>>643
FILE は OO 的ではありますが、OO そのものではありません
OO というからには委譲とは別の継承を表現できねばなりませんが、
C では継承を表現できません
2019/05/24(金) 22:41:32.12ID:K6buSCwsM
glibとか大昔からあるじゃん…
glibがooでないならooの定義をまず示せ
2019/05/24(金) 22:42:05.32ID:hUeULEjja
オブジェクト指向ってC++固有の概念なの?
だとすると、そりゃCで実現は無理でしょう。関係ないんだから。CとC++は。
2019/05/24(金) 22:44:44.02ID:0N6+tWvP0
>>648
glibc++ は OO かもしれませんが glibc が OO だとは寡聞にして聞きませんね
2019/05/24(金) 22:45:51.47ID:0N6+tWvP0
>>649
>オブジェクト指向ってC++固有の概念なの?
いいえ、Java も C# も OO だし、 python も ruby も OO で表現できます
2019/05/24(金) 22:50:26.22ID:hUeULEjja
>>650
GLibだよGLib
今知らないのもどうかと思うけど、使ってみると面白いと思うよ
2019/05/24(金) 22:51:22.70ID:hUeULEjja
>>651
いや、それだとつじつま合わないでしょ
自分の決めた道を突き進めよ
2019/05/24(金) 22:53:40.43ID:/xfbOr910
GTKのGLibだよね。
2019/05/24(金) 22:54:27.15ID:0N6+tWvP0
>>653
どうつじつまがあわないというのですか?説明ください
私は「OO ならば委譲と区別された継承を記述されなければならない」と主張しています
2019/05/24(金) 22:55:59.59ID:K6buSCwsM
>>650
glibcじゃねーよ…
gimp、inkscape、gnomeほか様々なソフトウェアで使われてる。
linuxとは無縁だったんだな
2019/05/24(金) 23:36:16.20ID:SCqWQYPI0
>>629
出来るに決まっている
OO言語はオブジェクト指向プログラミングがやり易いようになっているだけでそれじゃなきゃOO出来ないというのはOOについて理解していないだけ
2019/05/24(金) 23:46:49.71ID:SCqWQYPI0
>>644
多重じゃない継承の場合Cでは1つめのメンバにベースクラスのインスタンスを書くというルールなだけ

それだけで呼び出し元のコードはほぼなにも考えずにベースクラスの機能を使うことができる
2019/05/24(金) 23:58:34.02ID:S5Q/uU3j0
>>655
CでもOOできるし、継承できるし、オーバーライドもできる。
20年位前の本に「ANSI C に準拠したコンパイラならできる」と紹介されている。

メモリを意識したコードを書けない人には理解できないけどね。
660デフォルトの名無しさん (ワッチョイ dfb9-9b2Z)
垢版 |
2019/05/25(土) 00:01:58.97ID:7Hh+Cor80
C言語はABIが標準化されている、という文を見たんですが、
その標準仕様の名前は何ですか?

新しいプラットフォームがその標準仕様を満たせば
バイナリレベルあるいはソースレベルで移植性があるんでしょうか?
2019/05/25(土) 00:07:07.65ID:KPhaQb+n0
>>654
ていうかお前、MZ級にウンコな片山博文やんけ。

>>660
標準の名前は無いんじゃないの?
とりあえず「ABI」でググれ。
2019/05/25(土) 00:11:09.80ID:oops2jeN0
アーキテクチャ跨いでABIが統一できるわけないよね
引数の渡し方なんてアーキテクチャ変わったらそもそも使えるレジスタ変わるし

同一アーキテクチャの特定OS内ならバージョン変わってもABI互換ってのは良くあるけど
2019/05/25(土) 00:29:35.52ID:2ZlhwbAL0
>>661
そのプライドを大切にしろよ
2019/05/25(土) 05:52:48.29ID:Tic4GHY30
>>645
お前のOOの定義書いてくれ
俺の思うOOじゃないとか言われたらどうしようもないわなw
2019/05/25(土) 05:57:11.32ID:6KmI3UXB0
Cでオブジェクト指向プログラムなんて書くのは時間の無駄
速度が必要な部分だけCで作るのが正解
2019/05/25(土) 06:05:28.22ID:6T2yG8cn0
>>641
てめえの怠慢を俺が尻拭いする筋合いはねえぜ
調べるところまで教えてやったんだ
自分で調べる気がねえなら不勉強のまま取り残されろ
2019/05/25(土) 07:19:56.39ID:DOpjF4HUM
>>665
> Cでオブジェクト指向プログラムなんて書くのは時間の無駄
そう言うこと
ただ時間がかかると言うのとできるできないの話は別
なのでお前のレスのほうが時間の無駄w
2019/05/25(土) 15:51:01.79ID:jppBZDTS0
>>658
>多重じゃない継承の場合Cでは1つめのメンバにベースクラスのインスタンスを書くというルールなだけ

C では構造体のメンバの順番をプログラムから指定することはできたのでしょうか?
C コンパイラはアラインメントを考慮して最適化をはかり構造体のメンバを、プログラマの記述から適宜入れ替えていもいいのでは?

となると一つめのメンバにベースクラスのインスタンスを書いても、コンパイラに入れ替えられてしまっては無意味なのでは?
2019/05/25(土) 15:52:11.46ID:jppBZDTS0
>>659
>CでもOOできるし、継承できるし、オーバーライドもできる。
できないとおもいますよ、できるというのなら >>630 を C で記述してみてください

>20年位前の本に「ANSI C に準拠したコンパイラならできる」と紹介されている。
出典を明記ください
2019/05/25(土) 15:53:43.84ID:jppBZDTS0
>>666
>てめえの怠慢を俺が尻拭いする筋合いはねえぜ
あなたは私の怠慢を主張するのと同様の筋で、私はあなたの欺瞞を主張します
出典元や引用を正確にできないのであれば、あなたは嘘をついていると判断されてもしかたがないと思います
2019/05/25(土) 15:55:14.60ID:jppBZDTS0
>>661
片山先生は私とは比較にならないほど生産性の高いプログラマですよ
2019/05/25(土) 16:03:59.98ID:jppBZDTS0
>>652
はじめて知りました、>>650 は勘違いした内容でした、すみません
ご紹介ありがとうございます。今試しているところです!
2019/05/25(土) 16:17:34.75ID:Tic4GHY30
>>668
真面目な話、規格書読んでこい
ツッコミどころが頓珍漢すぎる
2019/05/25(土) 17:02:40.54ID:jppBZDTS0
>>673
コメントありがとうございます。確かに >>668 には誤りが含まれていました

ISO/IEC 9899:1999
6.7.2.1.5
As discussed in 6.2.5, a structure is a type consisting of a sequence of members, whose
storage is allocated in an ordered sequence,

JIS X3010:2003
構造体は,メンバの列から成る型とし,メンバの記憶域は,並べられた順に割り付ける(6.2.5参照)。

しかし、この記述は構造体のパディングが構造体の先頭に詰められる場合を排除していないと考えます

よって、>>658
>多重じゃない継承の場合Cでは1つめのメンバにベースクラスのインスタンスを書く
>それだけで呼び出し元のコードはほぼなにも考えずにベースクラスの機能を使うことができる

構造体の先頭にパディングがあった場合は、この記述は正しくないのではないでしょうか。
2019/05/25(土) 17:37:11.41ID:jppBZDTS0
>>674
よくよく考えると、私の「この記述は構造体のパディングが構造体の先頭に詰められる場合を排除していないと考えます」もかなり疑わしい、
パディングというものは、一つのメンバがあって、それに対してもう一つのメンバを置くときにパディングを置くものであって、最初からパディングを置く必然性がないですね

struct S {
int a;
} b;
のとき
&b = &(b.a)
は保障されている、時間がたつにつれてそんな気がどんどんしてきました…

>>658 を認め、同時に単一継承であれば C で OO と継承を表現できることを認めます
2019/05/25(土) 18:11:59.97ID:jppBZDTS0
>>674
> a type consisting of a sequence of members, whose storage is allocated …
この is にも惑わされてしまいました
これは
a type consisting of a sequence of members, each of which is allocated about storage in an ordered sequence
とか
a type consisting of a sequence of members, each of which's storage is allocated in an ordered sequence
くらいに解釈するべきなんですね
検討する機会をいただきありがとうございました
2019/05/25(土) 21:04:32.61ID:DDy3bloZM
>>675
絶対許さんぞおおおお
2019/05/25(土) 21:07:06.72ID:aM9QB8YDa
オブジェクト指向って抽象化が目的なのに、メモリ配置とか気にするのは馬鹿みたいだよな
2019/05/25(土) 21:23:55.56ID:cjrLAMgS0
MicrosoftのCOMはほとんど全てのコンパイラが構造体のメモリ配列を同じ様にするってのを利用してるんだっけ?
2019/05/25(土) 22:13:30.07ID:UN9uDEfaM
>>678
ここにも概念と実装の区別がついてないバカが…w
2019/05/25(土) 23:25:49.27ID:KPhaQb+n0
>>669
C言語でオブジェクト指向を表現する (クラス、継承)
https://qiita.com/qiita_kuru/items/8f3441bce9b2f53d1d62
この辺でも読んどけ。

「何故できるか」まで言及したもっといい文献はあるがカスには教えない。
俺は「せざるを得ない」状況だったのでCでOOしたが、ネイティブでOOできるならそれに越したことはない。

あ、同じ板でハッシュが一致してるのでお前は蟻。
2019/05/26(日) 01:24:13.78ID:zv+FEFKTa
>>681
またおまえか
2019/05/26(日) 08:36:08.16ID:o+/j3IaP0
>>670
は? 俺は主張なんざしてねえぜ
事実をありのまま指摘しただけだ
何勘違いしてやがる
というか勘違いということにせねば立場がねえってかw
2019/05/26(日) 08:56:22.54ID:7tI1cTYc0
もうこんなとこで喧嘩しても勝敗つかないんだからやめろw
仲良くできねえのかお前らは
2019/05/26(日) 12:29:05.12ID:lzKtO2WM0
でも冷静になって考えてみろ
単細胞時代から何億年と喧嘩してきた結果今の人間がいる訳だから喧嘩をやめてしまったらそれは果たして生物と言えるのか
逆に言えばAIが人知を超える時
人間は機械に滅ぼされ地球から人間はいなくなっているという事
つまり今何をすべきかと言うと人間は思考をやめアホになるべきである
そうアホの坂田こそ未来の救世主ネオなのである
2019/05/26(日) 15:17:23.15ID:CpBTYp0n0
>>681
そのご紹介のリンク先は、内容について、はっきりいって詰めが甘いです
すなわち、継承と委譲を区別できていません
そんな中途半端な理解で quita に掲載するとか、玉か石かどちらかといえば、石の部類でしょう、全然参考になりませんでした
そんな中途半端な内容の記事を掲載するあなたも同様と判断いたします
2019/05/26(日) 15:19:14.79ID:CpBTYp0n0
>>683
事実かどうかは、主観的か客観的か、に依存すると思いますが、
相対論においてはすべての事象について純客観的などありえない…@
ので、@より、あなたは主観を主張しているものと私は理解します
2019/05/26(日) 15:46:43.76ID:aNhG7Lwu0
>>686
「継承」に必要な操作一式を委譲に基づいて提供できているなら継承できていると思うんだけど、
言語サポートを伴って暗黙的に機能しない限り「継承」と呼ぶべきではない、ということなの?
そこで明確に区別することにあんまり意義が見出せないんだけど、その定義どっか出典示せる?
2019/05/26(日) 15:52:14.70ID:CpBTYp0n0
>>688
委譲による実装で継承を実現できているのなら、それは継承(の一形態)である、…@ という主張ですね
@は私にも理解できますが、委譲はダイヤモンド継承を回避できない欠点があるのでは、と考えています
「ダイヤモンド継承」については C++ の書籍には大概載っているかと、具体的な書籍名は探しておきます
2019/05/26(日) 16:00:20.28ID:Jdhtsrqd0
まあ継承なんてオブジェクト指向と関係ないからね
2019/05/26(日) 16:02:51.60ID:CpBTYp0n0
>>690
それは初耳です
Object Oriented に継承は憑き物だと思っていました、継承のない OO って存在するのですか?それは例えばなにですか?
2019/05/26(日) 16:08:55.02ID:aNhG7Lwu0
>>689
ちょっと何言ってるかわからないな。
ダイアモンド継承の問題を「継承」で回避しているが委譲では回避できないであろう例を挙げてくれたら考える。

明確に区別しないことも理解できると言うなら「詰めが甘い」とか「中途半端」とか言ってたのは何なのか・・・。
2019/05/26(日) 16:22:19.45ID:Jdhtsrqd0
>>691
なにって、言語を知りたいということ?
2019/05/26(日) 16:37:44.23ID:vwTAovQx0
クラスベースのOOP言語ではクラスの継承は一般的だけどプロトタイプベースのOOP言語では継承の概念は存在しないよ
2019/05/26(日) 16:40:12.48ID:CpBTYp0n0
>>692
クラス A, B, C, D について、
A のメンバ変数を a とする、また
B->A(B は A を派生する)
C->A
D->B, C (多重継承)
において、これを委譲で実装すると、B.A.a と C.A.a が同じであるべきにもかかわらず二重にインスタンスとして生成されてしまうので、
継承で実装した D.a を、委譲で実装した D.B.a と同一視するか、D.C.a と同一視するか、また継承における D.a を更新した場合に委譲では D.B.a と D.C.a の両方を更新するコードを生成しなければならないのか、
等あいまいな部分がでてくる、これがダイヤモンド継承問題です

継承で実装すれば、C++ ではこれを仮想継承といいますが D.a の実態を一つに限定することができますし、D.B.a, D.C.a の両方を保存することもできます、つまりモデリングにおいて選択肢を準備できる
しかし委譲で実装すると D.a の実態を一つに限定することが不可能です、つまり選択肢を準備できません

以上より委譲で継承のすべてを代行できないため、委譲と継承を区別する必要が生じると考えます
ただし、多重継承を認めないのであれば、委譲と継承は同一視しても差し支えないと考えます
2019/05/26(日) 16:41:21.10ID:CpBTYp0n0
>>693-694
ふーん、インタプリタ JavaScript には継承はないのですか
2019/05/26(日) 16:41:38.74ID:vwTAovQx0
https://ja.m.wikipedia.org/wiki/%E3%83%97%E3%83%AD%E3%83%88%E3%82%BF%E3%82%A4%E3%83%97%E3%83%99%E3%83%BC%E3%82%B9
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況