質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.34%

enumのclassの問題で自力で考えてもできなったのでヒントが欲しいです。

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 544

score 25

include <iostream>

enum E_MACHINE_TYPE
{
MACHINE_TYPE_1R = 0x89,
MACHINE_TYPE_2R,
MACHINE_TYPE_MAX
};

enum E_UNIT_TYPE
{
UNIT_TYPE_CONVEYOR,
UNIT_TYPE_HEAD,
UNIT_TYPE_MAX
};

struct T_CONVEYOR_PARAM
{
int clampType;
int loadSpeed;
bool operator== (const T_CONVEYOR_PARAM& other)
{

}
};

struct T_HEAD_PARAM
{
int headType;
};

// 共通通信パラメータ.
class AParam
{
public:
AParam::AParam(){}
AParam::~AParam(){}
};

// ホスト送信パラメータ.
// 別アプリケーションのホストへ情報を送信するときに使用するパラメータ.
class SendHostParam : public AParam
{
public:
SendHostParam::SendHostParam(){}
SendHostParam::SendHostParam(E_MACHINE_TYPE type):AParam(), m_machineType(type){}
SendHostParam::~SendHostParam(){}

void SetMachineType(E_MACHINE_TYPE& type){m_machineType = type;}
E_MACHINE_TYPE GetMachineType(){return m_machineType;}
private:
E_MACHINE_TYPE m_machineType;
};

// ユニット送信パラメータ.
// 同アプリケーション内のユニットへ送信するときに使用するパラメータ.
class SendUnitParam : public AParam
{
public:
SendUnitParam::SendUnitParam(){}
SendUnitParam::SendUnitParam(T_CONVEYOR_PARAM param):AParam(), m_destUnit(UNIT_TYPE_CONVEYOR){}
SendUnitParam::SendUnitParam(T_HEAD_PARAM param):AParam(), m_destUnit(UNIT_TYPE_HEAD){}
SendUnitParam::~SendUnitParam(){}

void SetConveyorParam(T_CONVEYOR_PARAM& param){m_convParam = param;}
T_CONVEYOR_PARAM GetConveyorParam(){return m_convParam;}

E_UNIT_TYPE GetDestUnit(){return m_destUnit;}
private:
E_UNIT_TYPE m_destUnit;
T_CONVEYOR_PARAM m_convParam;
T_HEAD_PARAM m_headParam;
};

// 通信クラス.
class MachineCommunication
{

define DEST_HOST            (0x9999)

define DEST_UNIT_CONVEYOR    (0x8888)

define DEST_UNIT_HEAD        (0x8886)

public:
MachineCommunication::MachineCommunication(){}
MachineCommunication::~MachineCommunication(){}

// ホストに情報を送信する.
bool SendHost(SendHostParam* param)
{
// DEST_HOST宛てにSendHostParamを送信(処理省略).
}
// 装置内ユニットに情報を送信する.
bool SendUnit(SendUnitParam* param)
{
if(DEST_UNIT_CONVEYOR == param->GetDestUnit())
{
// DEST_UNIT_CONVEYOR宛てにSendUnitParamを送信(処理省略).
}
else if(DEST_UNIT_HEAD == param->GetDestUnit())
{
// DEST_UNIT_HEAD宛てにSendUnitParamを送信(処理省略).
}
else
{
return false;
}
}
};

問1:E_MACHINE_TYPEに定義を1つ増やす場合に問題があるかないかとその理由について記述
問2:E_UNIT_TYPEに定義を1つ増やす場合に問題があるかないかとその理由について記述

↑問1,2は何故定義を増やすと問題があるのでしょうか?そもそもどういう知識が必要ですか?

問3:MACHINE_TYPE_2Renumの整数値を答えよ
→何故0x90ではないのでしょうか?

問4:構造体を比較できるよう、構造体内の変数が完全一致した場合trueとなるように処理を埋めよ
問5:SendUnitParamクラスにSetDestUnit関数を値渡しで追加せよ

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+1

問4で困っているみたいなので

struct A{
  int x;
  float y;
};

bool compare(const A &l, const A &r){
  if (l.x != r.x) return false;
  if (l.y != r.y) return false;
  return true;
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/08/07 22:21

    問4は↓ってことでしょうか?
    bool operator== (const T_CONVEYOR_PARAM& other)
    {
    if((clampType==other.clampType) &&(loadSpeed==other.clampType)
    {
    return TRUE;
    }
    return FALSE;
    }

    キャンセル

checkベストアンサー

0

こんにちは。

↑問1,2は何故定義を増やすと問題があるのでしょうか?そもそもどういう知識が必要ですか?

問いは「問題があるかないか」です。言うまでもなく「特殊事情が無い限り問題ない」です。
そのenum型を定義はしていますが使っていませんので、仮に特殊事情があるとしてもそれを読み取れません。特殊事情の記載もなく読み取れもしない以上、修正すると問題があると言われても困ります。
「通行止めの看板が立っている」とか「通ったら危険や迷惑がかかりそう」なわけでない公道を通ってはダメと言うようなものです。

もしかすると出題者は、_MAXを定義しているのでその後に定義を追加したら「普通問題があるでしょう」と考えているかも知れません。仮にも出題者ですから、ないとは思いますが、もしも万が一そうであればその人は論理的思考ができないのでプログラマーには向いていません。
この手のenum型の場合_MAXの前に定義を追加する人が大半と思いますが、これは定義を増やすことに当たりますし、上記同様に特殊事情がない限り問題ありません。

→何故0x90ではないのでしょうか?

他で既に正確な回答がついているので略。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/08/03 23:56

    問4,5はどうなるのでしょうか?

    キャンセル

  • 2019/08/04 00:46

    特に難しい問いではないと思いますよ。まずはご自身で頑張ってみませんか?

    キャンセル

  • 2019/08/04 08:52

    問5はですか?void SetDestUnit(E_UNIT_TYPE param){m_destUnit = param;}
    問4がさっぱりです。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.34%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る