C++の参照

#include <iostream>

using namespace std;

class cls{
public:
cls(int p):p(p){};
int p;
};

int main(){
int n,dim;

cls one(1);
cls two(2);
cls six(6);

cls *v1=&one;
cls *v2=&one;

v2=&six;

cout<<one.p<<endl;
cout<<two.p<<endl;
cout<<six.p<<endl;

cout<<v1->p<<endl;
cout<<v2->p<<endl;
return 0;
}


stdout:
1
2
6
1
6


これを参照表現を使って書きたい。
#include <iostream>

using namespace std;

class cls{
public:
cls(int p):p(p){};
int p;
};


int main(){
int n,dim;

cls one(1);
cls two(2);
cls six(6);

cls &v1=one;
cls &v2=one;

v2=six;

cout<<one.p<<endl;
cout<<two.p<<endl;
cout<<six.p<<endl;

cout<<v1.p<<endl;
cout<<v2.p<<endl;
return 0;
}

stdout:
6
2
6
6
6

できませんでした。
そういえば、参照先は変更できなかった。ポインタ使うかなぁ


追記(おまけ)
#include <iostream>

using namespace std;

class cls{
public:
cls(int p):p(p){};
int p;
};


int main(){
int n,dim;

cls one(1);
cls two(2);
cls six(6);

cls v1=one;
cls v2=one;

v2=six;

cout<<one.p<<endl;
cout<<two.p<<endl;
cout<<six.p<<endl;

cout<<v1.p<<endl;
cout<<v2.p<<endl;

v2.p=5;

cout<<two.p<<endl;
cout<<v2.p<<endl;
return 0;
}

複製の確認。なるべくnewやdeleteは避けていきたいですなぁ。


追記2
そもそもC++では、引数に指定されるたびにメモリ確保してメモリコピーが基本で、
ちょっとサイズが大きいと大変だから、コピーっぽく見せたような参照型を用意しましょう
という感じだった気がする。

ポインタと参照型が共存するというのは個人的には気味悪い気がするのですが。
参照型で出来ない事をポインタで扱っちゃえばいいのか、そこがC++の自由度でもあるからいいんじゃないか、などなど。


ところで、次のような場合、コンストラクタが2度・デストラクタが1度呼ばれますが、コンストラクタ1度に抑えるには・・・?
いや、確かにこの場合の話だとcreate関数をTestのコンストラクタとして定義すればよいだけなんですが。

class Test{
// なにか
};

Test create(int p1,int p2){
Test t;
// t操作
return t;
}

void process(){
Test t1;
t1=create(0,0);
}


こうするべきなんでしょうね…これでいいのかなぁ。

class Test{
// なにか
};

void create(Test &out,int p1,int p2){
// out操作
}

void process(){
Test t1;
create(t1,0,0);
}
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

tag : c++

コメントの投稿

非公開コメント

プロフィール

舞葉(ぶよう)

Author:舞葉(ぶよう)
github.io
はてなブログ(競プロ)

古い記事のソースコードは色分けしていないので、高機能テキストエディタに貼り付けたほうが見やすいかも。

検索フォーム
このブログについて
自分がつまづいた話題、なんとなく書きたいと思ったこと、ググったけど殆ど資料なかったぞオイ な話等をアップする予定。通りすがりでも、参考になっていただければと。プログラムの例外入力、メモリリークは責任負いません。投稿された記事は修正・削除する場合があります。
カテゴリ
タグ

HSP3アルゴリズムとデータ構造c++RubyJavaUnity画像解析C機械学習C#LinuxcodeIQKinectMinecraftTonyuSystemraspberrypiPythonHTML5音声制御Simulinkruby俺ルール通信制御Javascriptシミュレーション

counter-shinobi
固定記事
最新記事
最新コメント
月別アーカイブ
ブロとも申請フォーム

この人とブロともになる

アクセスランキング
[ジャンルランキング]
コンピュータ
1253位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
219位
アクセスランキングを見る>>