54
46

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

C++でクラス作成〜継承〜関数の抽象化までを試してみる

Last updated at Posted at 2014-02-09

##概要
最近C++を勉強中です。
C++でのクラス作成やら、ファイル分けたりやらのやり方を調べてみました。

##1.C++のクラスの作成
ヘッダファイルと、関数を実装するC++ファイルとを分けて作成する。
(ちなみに、この後継承とかもやってみたい、という思いからファイル名がParentになってます)

###ヘッダファイル

Parent.h
class Parent
{
public:
    void showMessage(const char* message);
};

###C++ファイル
続いて、ヘッダファイルを読み込むC++ファイルを作成する

Parent.cpp
#include <iostream>
#include "Parent.h"

/**
 * メッセージを出力する
 */
void Parent::showMessage(const char* message)
{
    std::cout << "[message]" << message << std::endl;
}

ここまででクラスの作成はOK

###実行ファイル

作成したC++のクラスを読み込み、showMessageメソッドを実行する、実行ファイルを用意する。

run.cpp
#include "Parent.h"

int main()
{
    Parent pt;
    pt.showMessage("Hello!");

    return 0;
}

###コンパイル・実行

$ g++ -o run run.cpp Parent.cpp
$ ./run
[message]Hello!

無事、結果が出力されたようです。

##2.クラスの継承

次に、継承をやってみます。
1.で作成した親クラスを変更し、

親 -> メッセージの出力のみ
子 -> メッセージの設定のみ

といった感じにしてみます。

###親クラス

Parent.h
/**
 *  親クラス
 */
class Parent
{
public:
    const char* message;
    void showMessage();
};
Parent.cpp
#include <iostream>
#include "Parent.h"

/**
 * メッセージを出力する
 */
void Parent::showMessage()
{
    std::cout << "[message]" << this->message << std::endl;
}

###子クラス

子クラスはParentクラスを継承し、setMessageという関数を実装します。

Child.h
#include "Parent.h"

/**
 * 子クラス
 */
class Child : public Parent
{
public:
    void setMessage(const char* message);
};
Child.cpp
#include "Child.h"

/**
 * メッセージを設定する
 */
void Child::setMessage(const char* message)
{
    this->message = message;
}

###実行クラス

run.cpp
#include "Child.h"

int main()
{
    Child ch;
    ch.setMessage("Hello!");
    ch.showMessage();

    return 0;
}

###実行

$ g++ -o run run.cpp Parent.cpp Child.cpp
$ ./run
[message]Hello!

実行できました!

##3.関数の抽象化

###仮想関数

さらに、子クラスで実装した「setMessage」関数を、親クラスで抽象化して宣言してみます。
「仮想関数」と呼ぶようです。
こんな感じ。

Parent.h
/**
 *  親クラス
 */
class Parent
{
public:
    const char* message;

    void showMessage();

    // abstractのイメージ。「= 0」をつける(純粋仮想関数)
    virtual void setMessage(const char* message) = 0;
};

###実行

$ g++ -o run run.cpp Parent.cpp Child.cpp
$ ./run
[message]Hello!

正常にコンパイル・実行できました。

うーん、まだC++全然慣れないっすねw

Makefileの作り方とかも勉強しようと思います。

54
46
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
54
46

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?