コンボボックスにファイルをドラッグ&ドロップするには? – 固定ページ 3 – プログラミング – Home

コンボボックスにファイルをドラッグ&ド...
 
通知
すべてクリア

コンボボックスにファイルをドラッグ&ドロップするには?

固定ページ 3 / 4

tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

省略時解釈が仮想関数な言語では意味合い的には1つに限られますが
C++ は非仮想なのでオーバーライドの解釈は難しくなっています。

ISO14882:1998 では override と hide が使い分けられているので
(7.3.3-12 とか)
仮想な場合だけ言うのが正しいのかもしれません(調べきれていません)


返信引用
subaru
 subaru
(@subaru)
ゲスト
結合: 19年前
投稿: 381
 

>virutalな関数じゃないとオーバーライドとは呼ばないのですね。

virtualがないのでCDropComboBox::AddStringとCComboBox::AddStringは
ちがうものです。
CComboBox::AddStringが単に見えてないだけで
CDropComboBoxのインスタンスからでも
m_combo.CComboBox::AddString(");
のように明示的に呼ぶことが可能です。

こんなページありました。
http://www.fides.dti.ne.jp/~oka-t/cpplab-hide-overload.html

ちなみにC#ではvirtualなメソッドであっても
overrideキーワードとnewキーワードの
使い分けができます。
http://msdn2.microsoft.com/ja-jp/library/6fawty39.aspx


返信引用
subaru
 subaru
(@subaru)
ゲスト
結合: 19年前
投稿: 381
 

>virutalな関数じゃないとオーバーライドとは呼ばないのですね。

virtualがないのでCDropComboBox::AddStringとCComboBox::AddStringは
ちがうものです。
CComboBox::AddStringが単に見えてないだけで
CDropComboBoxのインスタンスからでも
m_combo.CComboBox::AddString(");
のように明示的に呼ぶことが可能です。

こんなページありました。
http://www.fides.dti.ne.jp/~oka-t/cpplab-hide-overload.html

ちなみにC#ではvirtualなメソッドであっても
overrideキーワードとnewキーワードの使い分けができます。
http://msdn2.microsoft.com/ja-jp/library/6fawty39.aspx


返信引用
subaru
 subaru
(@subaru)
ゲスト
結合: 19年前
投稿: 381
 

2回送信されてしまいましたm(_ _)m


返信引用
通りすがり
 通りすがり
(@通りすがり)
ゲスト
結合: 24年前
投稿: 92
 

質問から横にそれてますけど
雑談のほうでしたら?


返信引用
リンク
 リンク
(@リンク)
ゲスト
結合: 22年前
投稿: 35
Topic starter  

>// ポインタとするのはなぜ?

単に->を使ってアクセスするから?

>// ここでカウントアップした f はどうなる?

クラスFOOのm_iの値プラス1

>// b.Test2(); とどうちかう?

同じでは?


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

> 単に->を使ってアクセスするから?
> 同じでは?
もっとも、C/C++言語のキモである部分が理解できていないようですけど。

int main()
{
Foo f;
Bar b;

b.m_Foo = &f;
b.Test1(); // b.Test2(); ここを変えてprinfで表示される値を確認してみてくだ
さい。
prinf( b.m_Fooのm_iの値は%d\n, f.m_i );

return 0;
}

別サンプル)
void swap( int x, int y )
{
int temp;
temp = x;
y = temp;
}

int main()
{
int x = 10, y = 20;
swap( x, y );
// この結果はどうなりますか?
// また、本当にxとyの値を変えたいときどうすればいいでしょうか?
}


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

> prinf( b.m_Fooのm_iの値は%d\n, f.m_i );
まちがいました

printf( b.m_Fooのm_iの値は%d\n, b.m_Foo.m_i );


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

> printf( b.m_Fooのm_iの値は%d\n, b.m_Foo.m_i );
ごめんなさい。orz

printf( b.m_Fooのm_iの値は%d\n, b.m_Foo->m_i );


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

何度もスイマセン。

void swap( int x, int y )
{
int temp;
temp = x;
x = y; // 抜けてました。
y = temp;
}

ここが理解できない場合、
http://www9.plala.or.jp/sgwr-t/c/sec10.html
から学習しなおして下さい。


返信引用
リンク
 リンク
(@リンク)
ゲスト
結合: 22年前
投稿: 35
Topic starter  

>void swap( int x, int y )
>{
> int temp;
> temp = x;
> x = y; // 抜けてました。
> y = temp;
>}

>int main()
>{
> int x = 10, y = 20;
> swap( x, y );
> // この結果はどうなりますか?
> // また、本当にxとyの値を変えたいときどうすればいいでしょうか?
>}

Ans.
メイン内のx,yの値は変わりません。
swap()内では
x=20, y=10です。

>// また、本当にxとyの値を変えたいときどうすればいいでしょうか?
void swap( int* x, int* y )
{
int temp;
temp = *x;
*x = *y;
*y = temp;
}

int main()
{
int x = 10, y = 20;
swap( &x, &y );

// x=20, y=10
}
ですよね?


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

ということはポインタは理解できていますよね?

class Hoge{
public:
int m_i;
void CountUp () { m_i++; }
};

int main(){
int n = 10;
Hoge h;

h.m_i = n;
h.CountUp();

reutrn 0;
}

class Hoge{
public:
int* m_i;
void CountUp () { ( *m_i )++; }
};

int main(){
int n = 10;
Hoge h;

h.m_i = &n;
h.CountUp();

reutrn 0;
}

の違いは説明できますか?


返信引用
リンク
 リンク
(@リンク)
ゲスト
結合: 22年前
投稿: 35
Topic starter  

ポインタはいちお理解できてるつもりです。

>の違いは説明できますか?

結果は同じになるはずです。

上はm_iに10を代入し、CountUp()内でプラス1してます。
下はm_iはINT型ポインタなのでnのアドレスを代入し、
CountUp()内ではm_iが差すアドレスの中身をプラス1してます。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

> 結果は同じになるはずです。
では、return 0;のまえで

printf( n = %d\nhのm_n = %d\n, n, h.m_i );
// したは *h.m_i

として表示される値が違いますが、どうしてでしょうか?


返信引用
リンク
 リンク
(@リンク)
ゲスト
結合: 22年前
投稿: 35
Topic starter  

>として表示される値が違いますが、どうしてでしょうか?

CountUp()内でプラス1してるから。
nの値はm_iに代入してるだけで変化なし


返信引用
固定ページ 3 / 4

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました