ページ 1 / 1
C++におけるポインタの質問
Posted: 2014年5月10日(土) 13:04
by Spika
コード:
#include "main.h"
using namespace std;
void update(Charactor* pc,Charactor* pe){
cout << " X " <<pc->GetPointX() << " Y " <<pc->GetPointY() << endl;
}
//object
void Object_Base::Initialize(){
cout<<"Object_Base I"<<endl;
}
void Object_Base::Update(){
cout<<"Object_Base U"<<endl;
}
void Object_Base::Draw(){
cout<<"Object_Base D"<<endl;
}
void Object_Base::Finalize(){
cout<<"Object_Base F"<<endl;
}
//charactor
Charactor::Charactor(int x,int y){
pos.x = x;
pos.y = y;
}
void Charactor::Initialize(){
cout<<"Charactor I"<<endl;
}
void Charactor::Update(){
cout<<"Charactor U"<<endl;
}
void Charactor::Draw(){
cout<<"Charactor D"<<endl;
}
void Charactor::Finalize(){
cout<<"Charactor F"<<endl;
}
t_pos Charactor::GetPoint(){
cout<<"Charactor GetPoint"<<endl;
return pos;
}
int Charactor::GetPointX(){
cout<<"Charactor GetPointX"<<endl;
return pos.x;
}
int Charactor::GetPointY(){
cout<<"Charactor GetPointY"<<endl;
return pos.y;
}
void Charactor::PrintData(int x){
cout << "Charactor Data" << x <<endl;
}
void* Charactor::GetPointer(){
return this;
}
//player
Player::Player(int x,int y){
pos.x=x;
pos.y=y;
}
void Player::Initialize(){
cout<<"Player I"<<endl;
}
void Player::Update(){
cout<<"Player U"<<endl;
}
void Player::Draw(){
cout<<"Player D"<<endl;
}
void Player::Finalize(){
cout<<"Player F"<<endl;
}
t_pos Player::GetPoint(){
cout<<"Player GetPoint"<<endl;
return pos;
}
int Player::GetPointX(){
cout<<"Player GetPointX"<<endl;
return pos.x;
}
int Player::GetPointY(){
cout<<"Player GetPointY"<<endl;
return pos.y;
}
//Enemy
Enemy::Enemy(int x,int y){
pos.x=x;
pos.y=y;
}
void Enemy::Initialize(){
cout<<"Enemy I"<<endl;
}
void Enemy::Update(){
cout<<"Enemy U"<<endl;
}
void Enemy::Draw(){
cout<<"Enemy D"<<endl;
}
void Enemy::Finalize(){
cout<<"Enemy F"<<endl;
}
t_pos Enemy::GetPoint(){
cout<<"Enemy GetPoint"<<endl;
return pos;
}
int Enemy::GetPointX(){
cout<<"Enemy GetPointX"<<endl;
return pos.x;
}
int Enemy::GetPointY(){
cout<<"Enemy GetPointY"<<endl;
return pos.y;
}
void* Enemy::GetPointer(){
return this;
}
int main(){
Charactor *charactor[5];
charactor[0] = new Player(10,20);
charactor[1] = new Enemy(25,30);
charactor[2] = new Player(75,51);
charactor[3] = new Enemy(54,41);
charactor[4] = new Player(25,30);
charactor[0] = (Charactor*)(charactor[1]->GetPointer());
for(int i = 0;i < 5;i++){
charactor[i]->Initialize();
charactor[i]->Update();
cout<<charactor[i]->GetPointX()<<endl;
cout<<charactor[i]->GetPointY()<<endl;
charactor[i]->Draw();
charactor[i]->PrintData(charactor[i]->GetPointX());
cout << "--------------------------" << endl;
}
}
この時、void*型からcharactorにキャストしていますが、プログラムとしてよいのでしょうか?
また、void*は汎用ポインタときき使ってみましたが、どういう振る舞いをするのでしょうか??
実行例ではきちんと動いていたので、エラーがあるなどでは、有りません。
Re: C++におけるポインタの質問
Posted: 2014年5月10日(土) 13:08
by Spika
名前を固定するため、ここへ登録したのですが、パスを忘れたのか間違えていたのかはいれなくなり、メアドも一部逆にしてしまっているようで、名前を変えざる得なくなってしましました。
前の名前はBoneです。
Re: C++におけるポインタの質問
Posted: 2014年5月10日(土) 13:31
by usao
>この時、void*型からcharactorにキャストしていますが、プログラムとしてよいのでしょうか?
そもそも何故void*を経由したのかが謎ですし,
よいか? と問われると よくはない という感じでしょうか.↓のような雰囲気ですので.
>また、void*は汎用ポインタときき使ってみましたが、どういう振る舞いをするのでしょうか??
void* にした時点で型の情報は失われます.
Enemy::GetPointer()が返すのは,型が不明な 謎の値 です.
で,それを
Charactor* 型に強引にキャストして(コンパイラに対して「この値は Charactor* 型だと思って」と指示して)やれば
Charactor*型として振舞おうとするわけです.
提示コードでは その値が本来は Enemy* 型な値で,さらに,(おそらく)Enemy型はCharactorからの派生クラスなのでしょうから
結果として うまいこと動いている, ということです.
(つまり,void*を使った場合,このように「本当にまともな型に」キャストしてやる必要がある.
コンパイラ側は,それが 本当に大丈夫なキャストなのかどうかを判定できないので,自己責任というか.)
Re: C++におけるポインタの質問
Posted: 2014年5月10日(土) 13:38
by usao
で,そういう
「うっかり間違うと何が起こるかわからないような危ない橋」をわざわざ渡る必要があるのかどうか?
ということを考えるべきかな,と思います.
あと,コードに関していえば,
・そもそも GetPointer() というメソッドの必要性 が謎です.
加えて,その戻り値がわざわざvoid*というのが更なる謎です.
このメソッドの意図がわかりません.
・135行目は 129行目でcharactor[0]に入れた値を上書きしてしまうので,いろいろと問題ありですよね.
Re: C++におけるポインタの質問
Posted: 2014年5月10日(土) 13:41
by Spika
usao さんが書きました:>この時、void*型からcharactorにキャストしていますが、プログラムとしてよいのでしょうか?
そもそも何故void*を経由したのかが謎ですし,
よいか? と問われると よくはない という感じでしょうか.↓のような雰囲気ですので.
>また、void*は汎用ポインタときき使ってみましたが、どういう振る舞いをするのでしょうか??
void* にした時点で型の情報は失われます.
Enemy::GetPointer()が返すのは,型が不明な 謎の値 です.
で,それを
Charactor* 型に強引にキャストして(コンパイラに対して「この値は Charactor* 型だと思って」と指示して)やれば
Charactor*型として振舞おうとするわけです.
提示コードでは その値が本来は Enemy* 型な値で,さらに,(おそらく)Enemy型はCharactorからの派生クラスなのでしょうから
結果として うまいこと動いている, ということです.
(つまり,void*を使った場合,このように「本当にまともな型に」キャストしてやる必要がある.
コンパイラ側は,それが 本当に大丈夫なキャストなのかどうかを判定できないので,自己責任というか.)
Charactorクラスのポインタに生成したPlayerとEnemyのアドレスを、別のクラスに持ち込めないかとおもったのですが、その場合戻り値の値はPlayer*とEnemy*と始めに書いてやらないといけないと、思っているため、オーバーライドできるように共通の型void*型へ一時的にいれてキャストしてやればなんとかなるのでは?と思ったのですが、void*をCharactor*にかえても同様に動くのでしょうか?
そもそもthisポインタとはどこのアドレスを渡しているのかが、少しわからないところがあります
Re: C++におけるポインタの質問
Posted: 2014年5月10日(土) 13:48
by Spika
usao さんが書きました:で,そういう
「うっかり間違うと何が起こるかわからないような危ない橋」をわざわざ渡る必要があるのかどうか?
ということを考えるべきかな,と思います.
あと,コードに関していえば,
・そもそも GetPointer() というメソッドの必要性 が謎です.
加えて,その戻り値がわざわざvoid*というのが更なる謎です.
このメソッドの意図がわかりません.
・135行目は 129行目でcharactor[0]に入れた値を上書きしてしまうので,いろいろと問題ありですよね.
すみません、これは一応はテストのつもりで、実用する時は用途が変わります
当たり判定を使用する際に、二つのアドレスを、当たり判定をするクラスへ渡せないだろうかと考え、その際どうしたら渡せるか?
また、どのような振る舞いをするか?
をとりあえず自分で確認しようと思い作ったコードになります
上書きした理由はちゃんとEnemyとしての機能を保持しているか確認するためにわざと上書きしました
Re: C++におけるポインタの質問
Posted: 2014年5月10日(土) 13:49
by softya(ソフト屋)
Spika さんが書きました:名前を固定するため、ここへ登録したのですが、パスを忘れたのか間違えていたのかはいれなくなり、メアドも一部逆にしてしまっているようで、名前を変えざる得なくなってしましました。
前の名前はBoneです。
ご本人に間違いない事は確認できました。
必要であればメールアドレス等を変更できます。
パスワードも一時的なものに変更可能です。※ 元のパスワードは管理人にも分かりません。
削除もできますが、すぐに同じ名前で登録できるか未確認です。たぶん、出来ると思いますが。
Re: C++におけるポインタの質問
Posted: 2014年5月10日(土) 13:52
by h2so5
PlayerとEnemyはCharactorクラスを継承しているんですよね。
それなら、当たり判定クラスのメソッドではCharactor*で受け取ればいいと思います。
void*を経由する必要はありません。
あと、CharactorではなくCharacterですよ。
Re: C++におけるポインタの質問
Posted: 2014年5月10日(土) 14:02
by Spika
softya(ソフト屋) さんが書きました:Spika さんが書きました:名前を固定するため、ここへ登録したのですが、パスを忘れたのか間違えていたのかはいれなくなり、メアドも一部逆にしてしまっているようで、名前を変えざる得なくなってしましました。
前の名前はBoneです。
ご本人に間違いない事は確認できました。
必要であればメールアドレス等を変更できます。
パスワードも一時的なものに変更可能です。※ 元のパスワードは管理人にも分かりません。
削除もできますが、すぐに同じ名前で登録できるか未確認です。たぶん、出来ると思いますが。
ありがとうございます!
御手数かけて申し訳わけありません
間違っている部分というのが
gmailがgmialとなって決まっている部分です。
もし、御手数でないのならよろしくお願いします!
Re: C++におけるポインタの質問
Posted: 2014年5月10日(土) 14:05
by softya(ソフト屋)
確かにメールアドレスが間違ってますね。直してみましたのでお試しください。
Re: C++におけるポインタの質問
Posted: 2014年5月10日(土) 14:15
by Spika
h2so5 さんが書きました:PlayerとEnemyはCharactorクラスを継承しているんですよね。
それなら、当たり判定クラスのメソッドではCharactor*で受け取ればいいと思います。
void*を経由する必要はありません。
あと、CharactorではなくCharacterですよ。
はい、継承しています!
コード:
#pragma once
#include <iostream>
typedef struct Point{
int x;
int y;
}t_pos;
typedef int GRAVITY;
class Object_Task{
public:
virtual void Initialize() = 0;
virtual void Update() = 0;
virtual void Draw() = 0;
virtual void Finalize() = 0;
};
class Object_Base:public Object_Task{
protected:
t_pos pos;
GRAVITY g;
public:
virtual int GetPointX() = 0;
virtual int GetPointY() = 0;
virtual t_pos GetPoint() = 0;
virtual void Initialize() override;
virtual void Update() override;
virtual void Draw() override;
virtual void Finalize() override;
};
class Character:public Object_Base{
int hp;
public:
Character(int x,int y);
Character(){}
virtual void* GetPointer();
virtual int GetPointX() override;
virtual int GetPointY() override;
virtual t_pos GetPoint() override;
virtual void Initialize() override;
virtual void Update() override;
virtual void Draw() override;
virtual void Finalize() override;
void PrintData(int);
};
class Player:public Character{
public:
Player(int x,int y);
virtual int GetPointX() override;
virtual int GetPointY() override;
virtual t_pos GetPoint() override;
virtual void Initialize() override;
virtual void Update() override;
virtual void Draw() override;
virtual void Finalize() override;
};
class Enemy:public Character{
public:
Enemy(int x,int y);
virtual void* GetPointer() override;
virtual int GetPointX() override;
virtual int GetPointY() override;
virtual t_pos GetPoint() override;
virtual void Initialize() override;
virtual void Update() override;
virtual void Draw() override;
virtual void Finalize() override;
};
このような継承を行っています。
またつづりを・・・
訂正ありがとうございます!
Re: C++におけるポインタの質問
Posted: 2014年5月10日(土) 14:15
by Spika
いまひとつわからないのがthisポインタといいましたが、その理由として、
新ゲームプログラミングの館のC++におけるメニュー画面の作り方に書かれている
コード:
(BaseScene*) new Menu(this);
という時のアドレスはどこを示してるのかということがわからず、なおかつ、thisポインタについて調べても、自身のポインタといった書き方をしていて、今回もこうあるのでは?という勘で使っています。
Re: C++におけるポインタの質問
Posted: 2014年5月10日(土) 14:16
by Spika
softya(ソフト屋) さんが書きました:確かにメールアドレスが間違ってますね。直してみましたのでお試しください。
ありがとうございます。
お手数かけて申し訳有りません。
今から、やってまいります
Re: C++におけるポインタの質問
Posted: 2014年5月10日(土) 14:27
by h2so5
Spika さんが書きました:いまひとつわからないのがthisポインタといいましたが、その理由として、
新ゲームプログラミングの館のC++におけるメニュー画面の作り方に書かれている
コード:
(BaseScene*) new Menu(this);
という時のアドレスはどこを示してるのかということがわからず、なおかつ、thisポインタについて調べても、自身のポインタといった書き方をしていて、今回もこうあるのでは?という勘で使っています。
この場合のthisはSceneMgrのインスタンスです。
Re: C++におけるポインタの質問
Posted: 2014年5月10日(土) 14:32
by usao
オフトピック
>それなら、当たり判定クラスのメソッドではCharactor*で受け取ればいいと思います。
仮に Player vs Enemy, Player vs Player, Enemy vs Enemy, ... という組み合わせによって
全く判定方法が異なるという話だとしたら,この中はどういう感じにするのがよいのだろう?
なんかこんな↓面倒そうな方法しか思い浮かばないのだけれど… うーん.
► スポイラーを表示
コード:
//クラス名とか違うけど…
class CollisionChecker
{
public:
virtual ~CollisionChecker(){}
virtual bool IsColliding( class A* ) = 0;
virtual bool IsColliding( class B* ) = 0;
};
class ACollisionChecker : public CollisionChecker
{
public:
ACollisionChecker( class A *pA ) : m_pA(pA) {}
public:
virtual bool IsColliding( class A* ){ std::cout << "AvsA" << std::endl; return false; }
virtual bool IsColliding( class B* ){ std::cout << "AvsB" << std::endl; return false; }
private:
class A *m_pA;
};
class BCollisionChecker : public CollisionChecker
{
public:
BCollisionChecker( class B *pB ) : m_pB(pB) {}
public:
virtual bool IsColliding( class A* ){ std::cout << "BvsA" << std::endl; return false; }
virtual bool IsColliding( class B* ){ std::cout << "BvsB" << std::endl; return false; }
private:
class B *m_pB;
};
//
class Base
{
public:
virtual ~Base(){}
virtual CollisionChecker *CreateChecker() = 0;
virtual bool CheckCollision( CollisionChecker *pCC ) = 0;
};
class A : public Base
{
public:
virtual CollisionChecker *CreateChecker(){ return new ACollisionChecker(this); }
virtual bool CheckCollision( CollisionChecker *pCC ){ return pCC->IsColliding(this); }
};
class B : public Base
{
public:
virtual CollisionChecker *CreateChecker(){ return new BCollisionChecker(this); }
virtual bool CheckCollision( CollisionChecker *pCC ){ return pCC->IsColliding(this); }
};
//判定処理
bool CollisionCheck( Base *L, Base *R )
{
CollisionChecker *pCC = L->CreateChecker();
bool ret = R->CheckCollision( pCC );
delete pCC;
return ret;
}
//
int _tmain(int argc, _TCHAR* argv[])
{
A a;
B b;
Base *pBase[2] = { &a, &b };
CollisionCheck( pBase[0], pBase[1] );
//
std::cin.ignore();
return 0;
}
Re: C++におけるポインタの質問
Posted: 2014年5月10日(土) 14:34
by Spika
h2so5 さんが書きました:Spika さんが書きました:いまひとつわからないのがthisポインタといいましたが、その理由として、
新ゲームプログラミングの館のC++におけるメニュー画面の作り方に書かれている
コード:
(BaseScene*) new Menu(this);
という時のアドレスはどこを示してるのかということがわからず、なおかつ、thisポインタについて調べても、自身のポインタといった書き方をしていて、今回もこうあるのでは?という勘で使っています。
この場合のthisはSceneMgrのインスタンスです。
ということは、実際通った実行場所のポインタということでしょうか?
SceneMgrのコンストラクタで行われたので、SceneMgrのインスタンスのアドレスが渡ったということでしょうか??
Re: C++におけるポインタの質問
Posted: 2014年5月10日(土) 14:44
by h2so5
Spika さんが書きました:
ということは、実際通った実行場所のポインタということでしょうか?
SceneMgrのコンストラクタで行われたので、SceneMgrのインスタンスのアドレスが渡ったということでしょうか??
SceneMgrのメソッド内に書かれているthisは必ずSceneMgrのインスタンスのポインタですよ。
>> usaoさん
Visitorパターンに近いですね。
Re: C++におけるポインタの質問
Posted: 2014年5月10日(土) 14:49
by Spika
h2so5 さんが書きました:Spika さんが書きました:
ということは、実際通った実行場所のポインタということでしょうか?
SceneMgrのコンストラクタで行われたので、SceneMgrのインスタンスのアドレスが渡ったということでしょうか??
SceneMgrのメソッド内に書かれているthisは必ずSceneMgrのインスタンスのポインタですよ。
>> usaoさん
Visitorパターンに近いですね。
ありがとうございます!
ようやくしこりがとれたようなきがします!
Re: C++におけるポインタの質問
Posted: 2014年5月10日(土) 14:50
by Spika
usao さんが書きました:オフトピック
>それなら、当たり判定クラスのメソッドではCharactor*で受け取ればいいと思います。
仮に Player vs Enemy, Player vs Player, Enemy vs Enemy, ... という組み合わせによって
全く判定方法が異なるという話だとしたら,この中はどういう感じにするのがよいのだろう?
なんかこんな↓面倒そうな方法しか思い浮かばないのだけれど… うーん.
► スポイラーを表示
コード:
//クラス名とか違うけど…
class CollisionChecker
{
public:
virtual ~CollisionChecker(){}
virtual bool IsColliding( class A* ) = 0;
virtual bool IsColliding( class B* ) = 0;
};
class ACollisionChecker : public CollisionChecker
{
public:
ACollisionChecker( class A *pA ) : m_pA(pA) {}
public:
virtual bool IsColliding( class A* ){ std::cout << "AvsA" << std::endl; return false; }
virtual bool IsColliding( class B* ){ std::cout << "AvsB" << std::endl; return false; }
private:
class A *m_pA;
};
class BCollisionChecker : public CollisionChecker
{
public:
BCollisionChecker( class B *pB ) : m_pB(pB) {}
public:
virtual bool IsColliding( class A* ){ std::cout << "BvsA" << std::endl; return false; }
virtual bool IsColliding( class B* ){ std::cout << "BvsB" << std::endl; return false; }
private:
class B *m_pB;
};
//
class Base
{
public:
virtual ~Base(){}
virtual CollisionChecker *CreateChecker() = 0;
virtual bool CheckCollision( CollisionChecker *pCC ) = 0;
};
class A : public Base
{
public:
virtual CollisionChecker *CreateChecker(){ return new ACollisionChecker(this); }
virtual bool CheckCollision( CollisionChecker *pCC ){ return pCC->IsColliding(this); }
};
class B : public Base
{
public:
virtual CollisionChecker *CreateChecker(){ return new BCollisionChecker(this); }
virtual bool CheckCollision( CollisionChecker *pCC ){ return pCC->IsColliding(this); }
};
//判定処理
bool CollisionCheck( Base *L, Base *R )
{
CollisionChecker *pCC = L->CreateChecker();
bool ret = R->CheckCollision( pCC );
delete pCC;
return ret;
}
//
int _tmain(int argc, _TCHAR* argv[])
{
A a;
B b;
Base *pBase[2] = { &a, &b };
CollisionCheck( pBase[0], pBase[1] );
//
std::cin.ignore();
return 0;
}
まだまだ、初心者なので、読み解くのに時間がかかりそうですが、コード例、出していただきありがとうございます!
Re: C++におけるポインタの質問
Posted: 2014年5月10日(土) 14:52
by Spika
softyaさんに質問です、一応、再発行してみたのですがメールは大体どれくらいで届くのでしょうか?
Re: C++におけるポインタの質問
Posted: 2014年5月10日(土) 14:58
by Spika
一応、当たり判定は長方形と円or長方形と正方形で、アクションです
大きさが異なるため、アドレスをよびそこから、画像サイズなどから判定を作ろうという策略です
Re: C++におけるポインタの質問
Posted: 2014年5月10日(土) 15:05
by softya(ソフト屋)
Spika さんが書きました:softyaさんに質問です、一応、再発行してみたのですがメールは大体どれくらいで届くのでしょうか?
すぐに届きませんか?
Re: C++におけるポインタの質問
Posted: 2014年5月10日(土) 15:07
by usao
thisって何ですか? というのは,一旦structで考えてみるとわかりやすいかもしれません.
コード:
struct Cat
{
int m_CP; //猫力
};
void InitializeCat( Cat *this, int CP )
{ this->m_CP = CP; }
void Damage( Cat *this, int damage )
{ this->m_CP -= damage; }
//
int main()
{
Cat A,B;
InitializeCat( &A, 10 );
InitializeCat( &B, 5 );
Damage( &B, 5 ); //かわいそうに…
}
Cat型のインスタンスを操作するための関数には,操作対象インスタンスのポインタを渡しています.
(この例では,InitializeCat()が2回呼ばれていますが,その引数thisの値は,1回目と2回目では異なります.)
これをクラスで書いたら
コード:
class Cat
{
public:
Cat( int CP ){ this->m_CP = CP; }
void Damage( int damage ){ this->m_CP -= damage; }
private:
int m_CP;
};
//
int main()
{
Cat A(10);
Cat B(5);
B.Damage( 5 );
}
のような感じになると捉え,両者の対応を見れば,thisって何をさしてるの?というが把握できるのではないでしょうか.
(クラス側のコードでも,コンストラクタ Cat::Cat() が2回呼ばれます.そのときのthisとは何か?)
オフトピック
>Visitorパターンに近いですね。
もうちょっと楽な方法(?)は無いものでしょうか.
Re: C++におけるポインタの質問
Posted: 2014年5月10日(土) 15:29
by Spika
softya(ソフト屋) さんが書きました:Spika さんが書きました:softyaさんに質問です、一応、再発行してみたのですがメールは大体どれくらいで届くのでしょうか?
すぐに届きませんか?
届いてません・・・
Re: C++におけるポインタの質問
Posted: 2014年5月10日(土) 15:31
by softya(ソフト屋)
Spika さんが書きました:softya(ソフト屋) さんが書きました:Spika さんが書きました:softyaさんに質問です、一応、再発行してみたのですがメールは大体どれくらいで届くのでしょうか?
すぐに届きませんか?
届いてません・・・
もしかして、迷惑メールに振り分けられていませんか?
Re: C++におけるポインタの質問
Posted: 2014年5月10日(土) 15:39
by Spika
[quote="usao" id=3,15065,119819]thisって何ですか? というのは,一旦structで考えてみるとわかりやすいかもしれません.
コード:
struct Cat
{
int m_CP; //猫力
};
void InitializeCat( Cat *this, int CP )
{ this->m_CP = CP; }
void Damage( Cat *this, int damage )
{ this->m_CP -= damage; }
//
int main()
{
Cat A,B;
InitializeCat( &A, 10 );
InitializeCat( &B, 5 );
Damage( &B, 5 ); //かわいそうに…
}
Cat型のインスタンスを操作するための関数には,操作対象インスタンスのポインタを渡しています.
(この例では,InitializeCat()が2回呼ばれていますが,その引数thisの値は,1回目と2回目では異なります.)
これをクラスで書いたら
コード:
class Cat
{
public:
Cat( int CP ){ this->m_CP = CP; }
void Damage( int damage ){ this->m_CP -= damage; }
private:
int m_CP;
};
//
int main()
{
Cat A(10);
Cat B(5);
B.Damage( 5 );
}
のような感じになると捉え,両者の対応を見れば,thisって何をさしてるの?というが把握できるのではないでしょうか.
(クラス側のコードでも,コンストラクタ Cat::Cat() が2回呼ばれます.そのときのthisとは何か?)
完璧!とまでは、言えませんが、概念的にはわかりました!
このクラスのm_CpにCpを代入するという感じですかね?
Re: C++におけるポインタの質問
Posted: 2014年5月10日(土) 15:47
by usao
>このクラスのm_CpにCpを代入するという感じですかね?
この「インスタンスの」ですかね.
「structのコード側では引数で渡しているthisを,クラスのメソッドでは省略できる」
くらいに捉えるとよいです.
(暗黙的にthisという引数が追加で存在していて,自動で渡されてる,という感じ)
Re: C++におけるポインタの質問
Posted: 2014年5月10日(土) 15:51
by Bone
Spika さんが書きました:
もしかして、迷惑メールに振り分けられていませんか?
振り分けられてました。
お騒がせしてすみませんでした!
Re: C++におけるポインタの質問
Posted: 2014年5月10日(土) 15:52
by Bone
usao さんが書きました:>このクラスのm_CpにCpを代入するという感じですかね?
この「インスタンスの」ですかね.
「structのコード側では引数で渡しているthisを,クラスのメソッドでは省略できる」
くらいに捉えるとよいです.
(暗黙的にthisという引数が追加で存在していて,自動で渡されてる,という感じ)
なるほど良くわかりました!
詳しい解説ありがとうございました!