トップページ⇒tech
1001コメント311KB

C++相談室 part92

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2011/11/04(金) 01:58:02.00
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part91
http://hibari.2ch.net/test/read.cgi/tech/1315922506/

このスレもよろしくね。
http://hibari.2ch.net/test/read.cgi/tech/1312621728/

ついでに壁紙にしてね。
http://www2.research.att.com/~bs/Bjarne.jpg
0002デフォルトの名無しさん2011/11/04(金) 01:58:53.59
■基本■
[C++ FAQ]
 http://www.parashift.com/c++-faq/
 http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
  Cとその仕様を比較しながらの解説なので分かりやすい。
  ***** 質問の前に必ずこの二つに目を通してください *****
[C/C++ リファレンス]
 http://en.cppreference.com/w/cpp (英語)
 http://ja.cppreference.com/w/cpp (↑の日本語訳だけどまだ未完)
[Stroustrup]
 http://www2.research.att.com/~bs/
[C++ International Standard]
 http://www.iso.org/iso/iso_catalogue/catalogue_ics/catalogue_detail_ics.htm?csnumber=50372
[JTC1/SC22/WG21 - C++]
 http://www.open-std.org/jtc1/sc22/wg21/
  ここから規格の最新ドラフトがダウンロードできる。
[JIS X3014]
 http://www.jisc.go.jp/app/pager?%23jps.JPSH0090D:JPSO0020:/JPS/JPSO0090.jsp=&RKKNP_vJISJISNO=X3014
  ISO規格の日本語訳。JIS X3014:2003はISO/IEC 14882:2003 (E)に対応。
0003デフォルトの名無しさん2011/11/04(金) 01:59:43.54
■Libraries■
[Boost]
 Boost http://www.boost.org/
 (日本語) http://www.kmonos.net/alang/boost/
 (日本語) http://shinh.skr.jp/boost/
[標準ライブラリ]
 SGI-STL http://www.sgi.com/tech/stl/
 STLport http://stlport.sourceforge.net/
 GNU libstdc++ http://gcc.gnu.org/libstdc++/
 Apache C++ Standard Library (STDCXX) http://stdcxx.apache.org/
 STLFilt http://www.bdsoft.com/tools/stlfilt.html
 (日本語) http://episteme.wankuma.com/stlprog/ (※1999年発行注意)
[Loki]
 http://sourceforge.net/projects/loki-lib/
 LokiPort-MSVC6sp5 http://fara.cs.uni-potsdam.de/~kaufmann/?page=lokiport
0004デフォルトの名無しさん2011/11/04(金) 02:00:25.16
■Books■
amazon C,C++関連書籍
 http://www.amazon.com/exec/obidos/tg/browse/-/3956/ref=br_bx_c_1_3/
 http://www.amazon.co.jp/b/?node=754384

The C++ Programming Language
 http://www.amazon.com/exec/obidos/ASIN/0201700735/
 http://www.amazon.co.jp/exec/obidos/ASIN/475611895X/ (翻訳)
C++ Primer (3rd Edition)
 http://www.amazon.com/exec/obidos/ASIN/0201824701/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756140068/ (翻訳)
The C++ Standard Library
 http://www.amazon.com/exec/obidos/ASIN/0201379260/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756137156/ (翻訳)
Effective C++
 http://www.amazon.com/exec/obidos/ASIN/0201924889/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756118089/ (翻訳)
More Effective C++
 http://www.amazon.com/exec/obidos/ASIN/020163371X/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756118534/ (翻訳)
Exceptional C++
 http://www.amazon.com/exec/obidos/ASIN/0201615622/
 http://www.amazon.co.jp/exec/obidos/ASIN/4894712709/ (翻訳)
More Exceptional C++
 http://www.amazon.com/exec/obidos/ASIN/020170434X/
 http://www.amazon.co.jp/exec/obidos/ASIN/4894714833/ (翻訳)
Exceptional C++ Style
 http://www.amazon.com/exec/obidos/ASIN/0201760428/
 http://www.amazon.co.jp/exec/obidos/ASIN/4894714663/ (翻訳)
0005デフォルトの名無しさん2011/11/04(金) 02:01:09.37
■Books(Templateまわり)■
Effective STL
 http://www.amazon.com/exec/obidos/ASIN/0201749629/
 http://www.amazon.co.jp/exec/obidos/ASIN/4894714108/ (翻訳)
Modern C++ Design
 http://www.amazon.com/exec/obidos/ASIN/0201704315/
 http://www.amazon.co.jp/exec/obidos/ASIN/4894714353/ (翻訳)
C++ Templates
 http://www.amazon.com/exec/obidos/ASIN/0201734842/
C++ Template Metaprogramming
 http://www.amazon.com/exec/obidos/ASIN/0321227255/
0006デフォルトの名無しさん2011/11/04(金) 02:20:57.01
■長いソースを貼るときはここへ。■
 http://codepad.org/
 http://ideone.com/
0007デフォルトの名無しさん2011/11/04(金) 07:40:38.35
STLつかうと一気に実行ファイルサイズが10倍に?!

環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない

すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。

C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?

#include <stdafx.h>
後死ね。

言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。

地鎮祭終了>>1乙
0008デフォルトの名無しさん2011/11/05(土) 12:49:24.51
落ちるぞ。
0009デフォルトの名無しさん2011/11/05(土) 19:50:36.17
>>1
おつ
0010デフォルトの名無しさん2011/11/05(土) 20:34:16.48
http://www2.research.att.com/~bs/Bjarne.jpg
http://www2.research.att.com/~bs/Bjarne.jpg
http://www2.research.att.com/~bs/Bjarne.jpg
http://www2.research.att.com/~bs/Bjarne.jpg
http://www2.research.att.com/~bs/Bjarne.jpg
http://www2.research.att.com/~bs/Bjarne.jpg
http://www2.research.att.com/~bs/Bjarne.jpg
http://www2.research.att.com/~bs/Bjarne.jpg
http://www2.research.att.com/~bs/Bjarne.jpg
http://www2.research.att.com/~bs/Bjarne.jpg
http://www2.research.att.com/~bs/Bjarne.jpg
http://www2.research.att.com/~bs/Bjarne.jpg
http://www2.research.att.com/~bs/Bjarne.jpg
http://www2.research.att.com/~bs/Bjarne.jpg
http://www2.research.att.com/~bs/Bjarne.jpg
http://www2.research.att.com/~bs/Bjarne.jpg
http://www2.research.att.com/~bs/Bjarne.jpg
http://www2.research.att.com/~bs/Bjarne.jpg
http://www2.research.att.com/~bs/Bjarne.jpg
http://www2.research.att.com/~bs/Bjarne.jpg
http://www2.research.att.com/~bs/Bjarne.jpg
http://www2.research.att.com/~bs/Bjarne.jpg
http://www2.research.att.com/~bs/Bjarne.jpg
http://www2.research.att.com/~bs/Bjarne.jpg
http://www2.research.att.com/~bs/Bjarne.jpg
http://www2.research.att.com/~bs/Bjarne.jpg
http://www2.research.att.com/~bs/Bjarne.jpg
http://www2.research.att.com/~bs/Bjarne.jpg
http://www2.research.att.com/~bs/Bjarne.jpg
http://www2.research.att.com/~bs/Bjarne.jpg
http://www2.research.att.com/~bs/Bjarne.jpg
http://www2.research.att.com/~bs/Bjarne.jpg
0011デフォルトの名無しさん2011/11/05(土) 23:55:51.53
びよーんすぽすぽがどうした?
0012デフォルトの名無しさん2011/11/06(日) 01:51:28.66
禿は女の尿を飲み続けると改善するらしい
0013デフォルトの名無しさん2011/11/06(日) 15:39:49.29
>>11
愛玩用人工知能KAZAMAを開発して地下室で生活してたのがバレた。
0014デフォルトの名無しさん2011/11/06(日) 21:20:47.23
禿本 4th マダー?tntn
俺あいつの語り口がけっこー好みなんだが入門いらね
0015デフォルトの名無しさん2011/11/06(日) 22:00:17.24
英語で読むのか、なあ、英語で読んじゃうのかウワァァァァァァヽ(`Д´)ノァァァァァァン!
0016デフォルトの名無しさん2011/11/06(日) 22:24:07.01
>>15
英語英語がたがた抜かすな。
コードは世界共通だ。
恐れることはない。
0017デフォルトの名無しさん2011/11/07(月) 00:09:55.73
むしろコード読んでから解説読んでフムフムするんだ
0018デフォルトの名無しさん2011/11/07(月) 00:56:46.36
そうそう
0019デフォルトの名無しさん2011/11/07(月) 01:50:25.19
class A{
public:
virtual void B(){
//何か
}
void C(){
B();
}
};
class exA:public A{
public:
void B(){
//何か
}
};

exA ex;
ex.C();//class AのB関数を呼ぶ。

exAのC()でclass AのB関数でなくclass exAのB関数を呼び出してもらいたいんだけど、

C関数をvirtualにしてexA関数で再定義する以外に方法ある?
0020デフォルトの名無しさん2011/11/07(月) 01:56:02.79
exAでBをoverrideしなきゃいいんじゃね。
てか、親classから派生classの関数を呼び出す処理は往々にして糞だ。
0021デフォルトの名無しさん2011/11/07(月) 01:59:16.20
ネーミングセンスがないな
0022デフォルトの名無しさん2011/11/07(月) 02:00:20.97
>>19
意図してる方法かしらんけど、
Cの中で、A::B();とすれば、AのB()が呼ばれるようになる。
ただし、派生先がどうであれ、B()は常にAのB();が呼ばれてしまう。
あとは、テンプレを使って、Type::B()の形式で呼び出すとか。
0023デフォルトの名無しさん2011/11/07(月) 02:35:35.29
>>20
糞ですまん。
C関数の中のB関数以降は全く同じ処理だから楽出来るかなとおもいまして。

>>21
ネーミングは気にしないでくれ。

>>22
template<class Func>
void C(){
Func::B();
};
こんな形ですか?
0024デフォルトの名無しさん2011/11/07(月) 07:37:16.19
>>19
そのソースで意図した動作ができてると思うんだけど、何か気に入らないの?
http://codepad.org/ENTqMxOP
0025デフォルトの名無しさん2011/11/07(月) 07:58:56.01
これってNVIだよね
0026デフォルトの名無しさん2011/11/07(月) 09:43:22.64
共変の戻り値とNVIイディオムを同時に使おうとするとやはり変
仮想関数の意味ないんじゃねこれじゃ

struct Base {
Base* duplicate () { return duplicate_xxx(); };
void put() const { std::puts("Base::put"); }
private:
virtual Base* duplicate_xxx () { return this; };
};

struct Derived : public Base {
Derived* duplicate () { return duplicate_xxx(); };
void put() const { std::puts("Derived::put"); }
private:
virtual Derived* duplicate_xxx () { return this; };
};

int main()
{
Base* b = new Derived;
Derived* d = new Derived;

b->put();
d->put();

delete d;
delete b;
}
0027デフォルトの名無しさん2011/11/07(月) 10:14:33.26
>>26
そのコードでどんな動作を期待してて何がどう変なんだ?
0028デフォルトの名無しさん2011/11/07(月) 10:19:48.84
うんこコードの量産を期待して頭が変です
0029デフォルトの名無しさん2011/11/07(月) 10:22:07.44
>>26
duplicate()がスマートポインタを返す設計で使えるかも?
0030デフォルトの名無しさん2011/11/07(月) 11:04:13.01
C++11 の変更点をまとめた専門書ってありますか?
0031デフォルトの名無しさん2011/11/07(月) 11:04:28.61
>>27
仮想関数ならb->putでDerivedの方のput()を呼び出してくれるんじゃないのかい
0032デフォルトの名無しさん2011/11/07(月) 11:20:23.17
設計直せでFA
0033デフォルトの名無しさん2011/11/07(月) 12:05:24.51
>>31
putが仮想関数ならそうだが>>26のputは仮想関数ではないしNVI使ってもないだろ。putにNVI使うなら

struct Base {
Base* duplicate () { return duplicate_xxx(); };
void put() const { put_(); }
private:
virtual Base* duplicate_xxx () { return this; };
virtual void put_() const { std::puts("Base::put"); }
};

struct Derived : public Base {
Derived* duplicate () { return duplicate_xxx(); };
private:
virtual Derived* duplicate_xxx () { return this; };
virtual void put_() const { std::puts("Derived::put"); }
};
0034デフォルトの名無しさん2011/11/07(月) 12:55:35.63
>>33
サンクス
なるほどduplicateではなくてputをNVIイディオムにしなければいけないのでした
やろうとしていた事はduplicateが返したthisからputを呼び出す事でした
勘違いしてたようです
0035デフォルトの名無しさん2011/11/07(月) 12:59:21.63
あーこれでもだめですね
二重にNVIを使わないといけないのか

#include <cstdio>

struct Base {
Base* duplicate () { return duplicate_xxx(); };
void put() const { std::puts("Base::put"); }
private:
virtual Base* duplicate_xxx () { return this; };
};

struct Derived : public Base {
Derived* duplicate () { return duplicate_xxx(); };
void put() const { std::puts("Derived::put"); }
private:
virtual Derived* duplicate_xxx () { return this; };
};

int main()
{
Base* b = new Derived;
Derived* d = new Derived;

b->duplicate()->put();
d->duplicate()->put();

delete d;
delete b;
}
0036デフォルトの名無しさん2011/11/07(月) 13:01:44.70
これでOKでしたありがとうございました

struct Base {
Base* duplicate () { return duplicate_xxx(); };
void put() const { put_(); }
private:
virtual Base* duplicate_xxx () { return this; };
virtual void put_() const { std::puts("Base::put"); }
};

struct Derived : public Base {
Derived* duplicate () { return duplicate_xxx(); };
void put() const { put_(); }
private:
virtual Derived* duplicate_xxx () { return this; };
virtual void put_() const { std::puts("Derived::put"); }
};

int main()
{
Base* b = new Derived;
Derived* d = new Derived;

b->duplicate()->put();
d->duplicate()->put();

delete d;
delete b;
}
0037デフォルトの名無しさん2011/11/07(月) 13:01:48.66
>>30
MayersがPDF売ってるよ
0038デフォルトの名無しさん2011/11/07(月) 13:58:15.69
>>36
duplicateをどういうものにしたいのかわからないけど(Derived*を返す必要が本当にあるのか?)
基底クラスのpublicな非仮想メンバ関数を派生クラスで再定義・隠蔽するのはNVIではないよ

struct Base {
Base * duplicate () { return duplicate_xxx(); };
void put() const { put_(); }
private:
virtual Base * duplicate_xxx () { return this; };
virtual void put_() const { std::puts("Base::put"); }
};

struct Derived : public Base {
private:
virtual Base * duplicate_xxx () { return this; };
virtual void put_() const { std::puts("Derived::put"); }
};

int main()
{
Base * b1(new Base);
Base * b2(new Derived);
Derived * d(new Derived);

b1->duplicate()->put();
b2->duplicate()->put();
d->duplicate()->put();

delete d;
delete b2;
delete b1;
}
0039デフォルトの名無しさん2011/11/07(月) 14:54:27.17
>>38
NVIと仮想関数の返す値を共変にするのを両立させたかったんです
やはり両立は無理ですかね?
0040デフォルトの名無しさん2011/11/07(月) 17:14:17.92
>>39
NVIは継承に関して不変だからムリだな
おとなしく仮想関数をインターフェースにしたほうがいいと思うよ
0041デフォルトの名無しさん2011/11/07(月) 17:19:16.29
何がしたいのかわからん
0042デフォルトの名無しさん2011/11/07(月) 17:20:59.14
>>40
いやここ見てたんですよ

http://d.hatena.ne.jp/tueda_wolf/20110125/p1

という事はこのブログは間違いですかね?
0043デフォルトの名無しさん2011/11/07(月) 17:34:50.92
>>42
もしもしなのでちょっと読んだだけだけど、これは単にそれっぽく隠蔽しただけなのでは……
仮想関数使った共変と振る舞いが一致しない場合があると思うんだけど


あと
>隠蔽(オーバーロード)
ってのは確実に誤りだな
0044デフォルトの名無しさん2011/11/07(月) 17:43:46.05
やっぱりですね
ありがとうございました
0045デフォルトの名無しさん2011/11/07(月) 17:56:36.65
共変返り値ってあって嬉しかったこと一度もないんだけどどんなときに使うの?
0046デフォルトの名無しさん2011/11/07(月) 18:02:50.52
よく考えると確かにないですね
どうせ返り値ってポインタだし、仮想関数で勝手に切り替えてくれるのですから
基底クラスへのポインタが返ればそれにNVIを適用すれば十分なはずです
0047デフォルトの名無しさん2011/11/07(月) 23:12:21.62
>>45
派生クラスメンバーの戻り値をコピーしたい場合。

Base b = object.OrverrideFunction(); //OrverrideFunctionは親の定義だとBase
Derived d = object.OrverrideFunction(); //共変の戻り値が使えないとコンパイルエラー
0048デフォルトの名無しさん2011/11/07(月) 23:22:06.84
>>47
そのobjectの型はDerivedなんでしょ?
だったら別にわざわざオーバーライドした関数呼ぶ必要ないじゃん
0049デフォルトの名無しさん2011/11/07(月) 23:23:58.61
紛らわしいけど、objectは全然違う型。
0050デフォルトの名無しさん2011/11/07(月) 23:25:41.14
struct Base {};
struct Derived : Base {};

struct BaseObj { virtual Base & OverridedFunction(); };
struct DerivedObj { Derived & OverridedFunction(); };

DerivedObj object;


じゃあこういう状況?
0051デフォルトの名無しさん2011/11/07(月) 23:27:19.72
>>50
そういう話
0052デフォルトの名無しさん2011/11/07(月) 23:35:22.88
>>51
DerivedObjの型がわかってるなら仮想関数を使う必要性がないのでは?
まあべつに使ってもいいけどオーバーヘッド増えるからこうしたほうがいいでしょ

struct DerivedObj : BaseObj {
/*inline*/ Derived & NonOverrided();
virtual Derived & OverridedFunction() { return NonOverrided(); }
};

Derived d = object.NonOverrided();
0053デフォルトの名無しさん2011/11/07(月) 23:40:32.75
>>52
親クラスほっといて、子クラス単品で使う分にはオーバヘッドはない。

DerivedHolder object;
Deriverd d = object.OverrideFunction();
(BaseHolder*)にobjectを突っ込んでるわけじゃないのでインライン展開される
0054デフォルトの名無しさん2011/11/07(月) 23:43:42.36
なるほどなっとくした
0055デフォルトの名無しさん2011/11/08(火) 23:57:43.27
classの継承でpublic継承はよく使うけどprivate継承とprotected継承はどんな時に使うの?
0056デフォルトの名無しさん2011/11/09(水) 00:03:13.46
boost::noncopyableはprivate継承する
他はあまり見ないな
0057デフォルトの名無しさん2011/11/09(水) 01:20:06.02
boost::operatorsもprivateでOKだっけ?
どういう原理か知らないけど。
0058デフォルトの名無しさん2011/11/09(水) 01:25:44.27
friendは継承しないから
0059デフォルトの名無しさん2011/11/09(水) 01:51:38.78
>>55
プライベートは「それを実装手段とする」
プロテクテッドは不明。

ってメイヤーが。
0060デフォルトの名無しさん2011/11/09(水) 02:00:18.67
private継承はあるクラスの内部処理に別のクラスのprotectedメンバを使いたいがpublicメンバは公開したくないときとかに使う、らしい
0061デフォルトの名無しさん2011/11/09(水) 07:19:46.96
noncopyableの場合はnoncopyableにアップキャストしたくないからprivate継承する
メンバを公開しないだけじゃなく、
アップキャストとスライシングを禁止するために使える
0062デフォルトの名無しさん2011/11/09(水) 09:57:08.59
非virtualデストラクタを持つクラスを継承するときにprotectedを使うらしい
0063デフォルトの名無しさん2011/11/09(水) 10:36:30.86
>>62
private に比べて何がうれしいの?
0064デフォルトの名無しさん2011/11/09(水) 21:02:09.32
>>55
class Base
{
protected:
      virtual int Handle(void) = 0;
      static int PeekHandle( Base &base ) { return Handle(); }
};

struct Derived:private Base
{
       Derived( Base &base ){ int handle = PeekHandle( base );
};

privateならこういう使い方もある。
Derivedは他のBaseを覗き見るが、自分は見られないようにできる。
protected継承した場合は、その派生クラスがわざわざもう一回、
Baseを継承しなくて済むようになる。
0065デフォルトの名無しさん2011/11/09(水) 21:49:59.60
>>63
公開したいメンバをpublicでusingすれば
あとはそのままアクセス制限を継承できるからじゃね?
まあさらに継承しない場合は関係ないだろうけど
0066デフォルトの名無しさん2011/11/09(水) 23:49:04.92
>>65
ごめん private との違いが見えてこない。
0067デフォルトの名無しさん2011/11/10(木) 00:52:32.65
>>65
そういや、あのusingって何のためにあるんだっけ?
単に 親クラス::メンバー; って書いても同じだよね。
0068デフォルトの名無しさん2011/11/10(木) 00:55:15.03
派生クラスは継承したんじゃなかったんかいバカヤロー
に対するしどろもどろな顛末が using
0069デフォルトの名無しさん2011/11/10(木) 01:04:18.25
>>66
そういやprotected継承だと孫クラスが、thisを親クラスを引数にとる関数に渡せるって点がある。
private継承だと、孫と親は同じオブジェクトだと解っててもキャストできない。
親クラスを取る関数に孫を渡したいが、外部からむやみに親にアクセスされたくない場合に多少つかえる。
0070デフォルトの名無しさん2011/11/10(木) 01:10:10.38
>>68
ん? 親クラス::メンバー; じゃ孫からは、メンバーとみなされないってこと?
0071デフォルトの名無しさん2011/11/10(木) 01:14:06.20
>>69
protected データメンバ並みに要らんな。
0072デフォルトの名無しさん2011/11/10(木) 01:14:32.49
>>69 C++ でおk
0073デフォルトの名無しさん2011/11/10(木) 02:41:42.27
protectedが必要になった時点で何かおかしいから見直す
0074デフォルトの名無しさん2011/11/10(木) 02:53:20.98
>>73
protectedデストラクタは必要だろ
0075デフォルトの名無しさん2011/11/10(木) 02:55:37.00
継承の話だろ
0076デフォルトの名無しさん2011/11/10(木) 03:05:35.65
それなら必要ない
0077デフォルトの名無しさん2011/11/10(木) 09:15:07.29
protected は中途半端。
方針としては中途半端。
「見えちゃ嫌だけどちょっとは見えたほうが」
そんなの微妙すぎ。
0078デフォルトの名無しさん2011/11/10(木) 12:35:07.45
>>77
そういうのをpublicにするの?おかしいだろう
派生クラスにだけ公開すると機能は明確だし。必要な時だけ使えばいいんだし
0079デフォルトの名無しさん2011/11/10(木) 13:51:48.52
中途半端って、当たり前やん
もともと private と public しかなく、後付けで追加したトリビアなんだから
0080デフォルトの名無しさん2011/11/10(木) 14:16:34.87
サブクラスには公開したいがサブサブクラスには見せたくない
でも継承をサブクラスに限定するノーコストの方法も無い
よってprotectedはゴミ
0081デフォルトの名無しさん2011/11/10(木) 14:18:46.97
protectedはどうしてもそれしか方法が無いときに
仕方なく使うもの。汚いことを自覚した上で。
0082デフォルトの名無しさん2011/11/10(木) 14:31:16.80
他に書き方があるからどうしてもっていうケースは存在しない
よってprotectedは生ゴミ
0083デフォルトの名無しさん2011/11/10(木) 15:27:21.24
>>82
まあそうなんだけど、大人の事情でって事あるじゃん
0084デフォルトの名無しさん2011/11/10(木) 16:51:43.31
頭隠して尻隠さずとでも言うところか
0085デフォルトの名無しさん2011/11/10(木) 17:37:38.18
protectedデストラクタは必要だろ
0086デフォルトの名無しさん2011/11/10(木) 17:39:30.31
継承の話だろカス
0087デフォルトの名無しさん2011/11/10(木) 17:40:12.71
>>85
>>74-75
0088デフォルトの名無しさん2011/11/10(木) 17:44:06.95
protectedデストラクタ厨必死だなww
0089デフォルトの名無しさん2011/11/10(木) 19:50:26.59
>>66
protectedメンバをprotectedメンバのままにしておきたい場合に
protected継承する事になる、ということ
private継承すると、protectedメンバをprotectedメンバのままにするには
protectedなとこで全部usingしないといけなくなる
0090デフォルトの名無しさん2011/11/10(木) 20:05:20.15
はいはい
0091デフォルトの名無しさん2011/11/10(木) 21:07:08.16
ばぶー
0092デフォルトの名無しさん2011/11/10(木) 23:53:35.57
>>78
public にすれば機能が不明確になったり、必要でもないのに無理やり使わされたりするような
言い方だけど、そんなことはないよね。
0093デフォルトの名無しさん2011/11/11(金) 00:13:50.03
>>77
そのネタは通じなかったみたいだな
0094デフォルトの名無しさん2011/11/11(金) 00:29:47.00
>>77
乙女心は難しいよな
0095デフォルトの名無しさん2011/11/11(金) 00:35:47.41
>>77
財産は子供にだけ渡したい。
私の財産はみんなの共有物じゃない。

中途半端?
継承なんだから、親子関係と強欲具合で考えればいいんだよ
0096デフォルトの名無しさん2011/11/11(金) 00:40:12.46
>>95
知らない誰かがいくつでも勝手に追加するものを「子供」だなどと考えるのは無理があるだろう。
0097デフォルトの名無しさん2011/11/11(金) 01:05:29.24
>>96
ファイルスコープ限定して子の制約は出来るが。
尤も。protectedの用途(protected継承に限らず)は、
子に抽象化関数を実装することを義務付けた上で
機能提供することだろうがな。
0098デフォルトの名無しさん2011/11/11(金) 01:07:46.81
ラララララーラララーララ・・・
0099デフォルトの名無しさん2011/11/11(金) 01:09:07.16
>>97
ファイルスコープ内を信用するなら public でもいいじゃん。
0100デフォルトの名無しさん2011/11/11(金) 09:14:19.38
protectedよりfriendの方がましだわ
子には公開できて孫には公開しないとか簡単にできるし
protectedでは簡単に間違いが起こってしまう
0101デフォルトの名無しさん2011/11/11(金) 13:21:00.13
子作りするときだけ公開するところ
■ このスレッドは過去ログ倉庫に格納されています