class BASE{
public:
virtual void out(int n = 0){ 〜; }
virtual void out(void){ 〜; }
};
class A1 : public BASE{
public:
void out(void){ 〜; }
};
int main()
{
A1 a;
a.out();
a.out(2); // ←コンパイルエラー
return 0;
}
これってなんでコンパイル通んないんでしょう?
MSVC .NET使ってます。
out(void)がBASE::(int)を隠しているから
隠すなら private に明示的に using する
隠したくないなら public に using する
はっきり汁!
>>952 名前解決の順序が、引数型によらず
1. まず最も内側のスコープ内 (この場合だと A クラス内部) で探す
2. 見つからなかったら、一つ外のスコープ (この場合だと BASE) で探す
でリストアップしてきて、その中から引数型が合うものを選択するため。
そうなってる理由はともかく a.out(2) で BASE::out(int)を呼び出したければ
class A1 の定義中で using BASE::out; しとけば OK。
あと BASE::out() は BASE::out(int n = 0) と BASE::out(void) どちらを呼んで
欲しいのか意図が謎。なおした方が良いと思うぞ。
>あと、引数のない関数を定義するのに void って書くの気持ち悪いからやめれ。
エー
>>953-955 ほんとありがとうございます。よーく分かりました。
>デフォ引数
色々実験してる内に付けてしまったもので、投稿前に消し忘れてました。スマソ
あいまいになる!って突っ込まれるなあと思ってました。。。
何はともあれ、明快な解答ありがとうございました!
>>956 エー、じゃない。おまいはCプログラマか。
959 :
デフォルトの名無しさん:05/01/22 19:07:38
extern "C" のときは書いてる >(void)
>>950 そんなあなたにboost::thread
>>960 使ってるけど全然だめぽ
おとなしく言語仕様に取り入れてほしい
でも時期標準のリストにはスレッドのスの字も無かったっけ…orz
極力機種依存を避けてる以上無理だろねぇ
実装レベルをいくつかに分けるとか、
モジュールに分けたりとかして、
実装がサポートする範囲を選べるようにできないかなぁ……
やっぱ無理かなぁ……
せめて synchronized, wait, notify, notifyAll, join だけでもサポートして欲しい
おとなしくjava使えよハゲの下僕ども
>>961 無理だろうな。D&E でも Bjarne が「並列処理を必要とするアプリケーションは
多いが、そのための唯一の支配的な方式はない」と断言してる。
C++ の用途は数値計算からオフィススイート、データベースエンジン、OS、
ゲームまで幅広い。特定のプログラミングスタイルや、目的に特化した機能は
現状の C++ の利点を殺すことになるから、まず入らん。
>>963 実装レベルを分けるってのはいいね。
EC++の逆ね。やって欲しいな。
質問なんですけど、
class MyString {
string *pstr;
public:
MyString(const MyString ©) {
pstr = new string;
*pstr = *copy.pstr; // ←この部分
}
string *GetString() const { return pstr; }
}
*pstr = *copy.pstr;
この記述はなんでコンパイルエラーにならないんですか?
*pstr = *copy.GetString();
じゃなきゃだめだと思うんですが。
ちなみにコンパイラは BCC5.5 です。
>>969 クラスの定義内では自分自身と同じ型の変数はprivateでも丸見えだよ。
C++的にOKだからココンパイルエラーにならないんだよ坊や
落ち着け坊や
( ・∀・)つ〃∩ ヘェー
どうもありがとうございました
privateの仕様:
「メンバへのアクセスが制限され、
そのクラスのメンバ関数とフレンド以外はアクセスできなくなる。」
【クラス】とは書かれているが、【インスタンス】とは書かれていない。
詐欺的表現にも見えるが、所詮、騙される方が悪い。
975 :
デフォルトの名無しさん:05/01/23 01:00:06
なぜ C++ は以下のように浮動乗数点数の定数を定義できない仕様にしたのでしょうか?
struct X {
static const int i = 100; // OK
static const float pi = 3.1416f; // error
};
むしろprotectedのときに引っかかるんだな。
基底クラスのprotectedメンバに触れるのは
自分自身と同じ型を参照しているときだけってのに
気が付かないで基底グラス型を参照しながら、
「protectedメンバに触れねぇぞ、なんじゃこらぁ!」
>>975 質問がおかしい。static constな整数型のみクラスボディで初期化可能なのであって、
それ以外の静的データメンバはクラスボディの外側で初期化しなければならない。
だからstatic const intが特別な例外なのだ。
978 :
デフォルトの名無しさん:05/01/23 01:17:50
>>975 「なぜ Bjarne は」もしくは「なぜ WG21 は」じゃないか?
昔はFPUがなかったりして浮動小数点の処理がいちいち関数だったりしたからじゃないか?
不動小数点数がコンパイル時定数である必要性が無いからかな
struct X {
static const int i = 100; // OK
static const float pi;
};
const float X::pi = 3.14f; //OK
これでいいだろ。:
>>980 ヘッダで定義できないのは嫌じゃないか?
ヘッダとでバラバラに書くのが鬱陶しいよな
C++ FAQ ではヘッダに書けるもんはヘッダに書けばいいって書いてたけど
float pi() {return 3.1416f;}
984 :
デフォルトの名無しさん:05/01/23 03:02:24
数値を見てそれと分かるんだから
#define PI 3.1415f
986 :
デフォルトの名無しさん:05/01/23 03:06:54
>>985 float 限定やだ
それがたとえ long double 限定でも同じこと
987 :
sage:05/01/23 03:39:32
Task.hで
class Task{
...
}
Task.cppで定義する
んでもって
Enemy.hで
#include "Task.h"
class Enemy:public Task{←ここでエラー
...
}
"型名が必要" とエラーになってしまします。
どういうことでしょうか?ご助力お願いします。
BccとBccdev使ってます。
>>987 class Task {
...
}; ←このセミコロンを忘れているというオチじゃないよね?
そろそろ次スレの季節なの?
すいません、大丈夫です・・・
書くの忘れてました
>>990 俺の所ではエラーでないぞ。ソース全部晒してみろ。
次スレのタイトルはスレが乱立しないように
C++相談室(STL含む) part39
でよろしく
>>975 enumとの互換性を保つ為に、クラスボディで整数型のみ初期化可能にした
994 :
デフォルトの名無しさん:05/01/23 10:33:05
C++相談室(STL,template含む) part39
STLつかうと一気に実行ファイルサイズが10倍に?!
>>992 STL含むって言うけどさ
>>1に
「テンプレートライブラリ(STL含む)に関する質問は専用の別スレにお願いッス。」
って書いてあるのはどうする?
templateスレの次スレのスレタイにSTLを入れてもらう方がいいんじゃないか?
997 :
デフォルトの名無しさん:05/01/23 11:05:55
そのうち関数スレとかクラススレとか・・・・ もうアフォかとヴァカかと
>>997 はぁ?お前が馬鹿でアホだろ。C++より長いCでもそんなスレできてねーだろタコ。
と煽ったからって自分で糞すれ立てたりするなよ。馬鹿は困るねぇ。
999
1000 :
デフォルトの名無しさん:05/01/23 13:19:12
rubyyyyyyyyyyyyyyyyyyyy!!!!!!!!!!!
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。