継承について教えて下さい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ponnpo

継承について教えて下さい

#1

投稿記事 by ponnpo » 13年前

クラスと継承を勉強しています。
C言語で書いているのですが、
行き詰ってしまいました。

コード:

#include <stdio.h>
#define OK 0
#define UNDERFLOW -1
#define OVERFLOW -2
#define N 3

//==========================================
class stack {

// メンバ変数の定義
	int top;
	int sdata[N];
public:
  stack() {this->top = 0;}

  void init() {
  this->top = 0;
} // end of init
//-----------------------------------------
  int push(int d) {
    if (this->top >= N) goto ERR; // オーバフローのチェック

    sdata[this->top] = d;// データの格納
    this->top += 1;// データ格納位置の更新

    //printf("%d %d\n", this->top, sdata[this->top]); // ??
    printf("%d: pushed\n", d); 
    return OK;
  ERR:
    printf("Error: overflow\n"); 
    return OVERFLOW;
  } // end of push
//-----------------------------------------
  int pop(int *d) {
    if (this->top <=0 ) goto ERR;  // アンダーフローのチェック

    this->top -= 1; //データ格納位置の更新
    *d = this->sdata[this->top]; //データの取り出し

    printf("%d: popped\n", *d); // 動作確認用
    return OK;
  ERR:
    printf("Error: underflow\n"); 
    return UNDERFLOW;
  } // end of pop
//-----------------------------------------
  void show() {
    int i;

    printf("Stack: ");
    for(i = 0; i< this->top; i++) 
      printf("%d ", this->sdata[i]); // データの表示
    printf("\n");

  } // end of show
};// end stack
//========================================
class stack2: public stack {
public:

  // 関数topdataの定義
	void topdata(int* d){	
	}
	
};
//========================================
int main() {
  int cc;
  int d;

  stack2 st;

  st.init();

  cc = st.pop(&d);
  cc = st.push(10);
  cc = st.push(20);
  cc = st.push(30);
  st.show();
  cc = st.push(40);
  st.topdata(&d);
  printf("top = %d\n", d);
  cc = st.pop(&d);
  st.show();

  return 0;

} //end of main
実行結果

Error: underflow
10: pushed
20: pushed
30: pushed
Stack: 10 20 30
Error: overflow
top = -858993460
30: popped
Stack: 10 20
続行するには何かキーを押してください . . .

top = 30にしたいのですが
クラスを継承するclass stack2の
topdeta関数の使い方がわかりません。
class stackのほうは大丈夫な感じではいるのですが
継承するにはどうすればよろしいんでしょうか。
よろしくお願い致します。

へにっくす

Re: 継承について教えて下さい

#2

投稿記事 by へにっくす » 13年前

一番お手軽なのは、
派生先で使えるようにstackのメンバ変数をprotectedにすることかな。
そうすればstack2でそのstackのメンバ変数を使えるが、、

個人的にはいや 笑

nil
記事: 428
登録日時: 14年前

Re: 継承について教えて下さい

#3

投稿記事 by nil » 13年前

C言語でclassは使えません。C++です。
>topdata関数の使い方がわかりません。
topdata関数が何をする関数なのかわからないので答えようがありません

ponnpo

Re: 継承について教えて下さい

#4

投稿記事 by ponnpo » 13年前

へにっくすさん、涼雅さん
返信ありがとうございます。

topdataはスタックの
先頭にあるデータを表示するものです。

基本クラスを派生クラスで継承して
関数を増やしていくという方法がよくわかりません。

かずま

Re: 継承について教えて下さい

#5

投稿記事 by かずま » 13年前

ponnpo さんが書きました:topdataはスタックの
先頭にあるデータを表示するものです。
st.topdata(&d);
printf("top = %d\n", d);

というコードで、top = 30 という表示をさせたいということなら、
topdata は、スタックの先頭にあるデータを返すだけで、表示はしませんよね。

コード:

  void topdata(int* d){   
    pop(d);
    push(*d);
  }
でよいのでは?

ponnpon

Re: 継承について教えて下さい

#6

投稿記事 by ponnpon » 13年前

かずまさん
ありがとうございます。
大変勉強になりました。

閉鎖

“C言語何でも質問掲示板” へ戻る