C++の勉強を始めたばかりです。よろしく回答お願いします。
以下のプログラムにおいて、全員表示にて実行されるp->Show()は、”pの示すデータを使ってShowを実行しろ”という解釈で良いのでしょうか。実際にそのように動くのでそれでよいと思うのですが、いろいろな本を読んでもそのような記述はなく、単にポインタでアクセスできるとしか書かれていないので質問させて頂きました。
#include <stdio.h>
#include <string.h>
#include <iostream.h>
////// クラス宣言 ///////////////////////////////////////////////////
class CPerson //////////////////////// 個人情報クラス
{
private : // 以下は外から直接アクセスできない
char Name[ 20 ]; // 名前
public : // 以下は外からアクセスできる
CPerson( char* name)// コンストラクタ
{
strcpy( Name, name );
Next = NULL;
};
void Show(); // 個人情報の表示
CPerson* Next; // 次の個人情報へのポインタ
};
class CAddress //////////////////////// アドレス帳クラス
{
private :
CPerson* pPerson; // 先頭の個人情報へのポインタ
void AddList( CPerson* pAdd );// 個人情報の追加処理を行う
public :
CAddress(){ pPerson = NULL; }; // コンストラクタ
~CAddress(); // デストラクタ
void Show(); // 一覧を表示する
void AddPerson( char* name);//, char* address ); // 個人情報を追加する
};
////// メンバ関数のインプリメンテーリョ///////////////////////
void CPerson::Show()
{
cout << Name << '\t' << '\n';
}
CAddress::~CAddress()
{
CPerson* p = pPerson;
while ( p )
{
pPerson = p->Next;
delete p;
p = pPerson;
}
}
void CAddress::Show()
{
cout << "Name\tAddress\n";
CPerson* p = pPerson;
while ( p )
{
p->Show();
p = p->Next;
}
}
void CAddress::AddPerson( char* name)
{
CPerson* p = new CPerson( name);
if ( pPerson == NULL ) {pPerson =p; return; }//1回目
CPerson* p1 = pPerson;
while ( p1->Next ){//1と2回目以外
p1 = p1->Next;
}
p1->Next = p;
}
//// ** main ////////////////////////////////////////////////////
int main()
{
CAddress MyAddress;
while ( 1 )
{
char name[ 20 ];
cout << "\n名前を入力してください(0:終了):";
cin >> name;
if ( name[ 0 ] == '0' ) break;
MyAddress.AddPerson( name);
}
while ( 1 )
{
char sel;
cout << "\n表示する番号(A:全員表示 Q:終了)";
cin >> sel;
if (sel == 'a' )
MyAddress.Show();
else if (sel == 'q' )
break;
}
return 0;
}
まず,C/C++において,メンバのアクセスは,
・オブジェクト(o)
o.member
・ポインタ(p)
p->member または (*p).member
・リファレンス(r) [参照とも]
r.member
のようにアクセスします。
で,このことはmemberがメンバ変数だろうとメンバ関数だろうと一緒です。
これをどのように解釈するかは自由です。
私が説明する場合,データという言葉は出てこないですが……。
それから,iostream.hは標準でないので使わない方がよいです。
#include <iostream>
とします。最初は名前空間とかややこしいと思うので,
#include <iostream>
using namespace std;
としておくとよいでしょう。
#listとかvectorとか使うと簡単になると思います。
YuOさん 有難うございます。
再度質問させてください。質問内容は同じことですが・・・。
下記Show()において、Nameはpの指すCPersonのNameが使用されるということで良いのでしょうか?
void CPerson::Show()
{
cout << Name << '\t' << '\n';
}
そういうことです。
有難うございました。
ツイート | ![]() |