6

編集:「加算」クラスをに追加しましたが、誤って忘れてしまいました。クラスを異なるファイルに分割するにはどうすればよいですか?クラスがどのように機能するか、オブジェクトなどを作成する方法を理解しています。ただし、クラスを別のファイルに配置するプロセスで混乱が生じています。助けてくれてありがとう!また、IDEとしてCodeBlocksを使用しています。これまでの私の理解は次のとおりです。

  1. 新しいクラスを作成すると、CBは「.h」と新しい「.cpp」を提供します。
  2. ソースファイルの先頭にある「Classname::Classname」はスコープ解決演算子です。
  3. メインソースファイルで「#includeclassname.h」を使用して、その内容をインポートします。
  4. 宣言したオブジェクトを使用して、「main」から関数を呼び出すことができます。

これはこれまでの私の理解ですが、それを実装する方法について混乱しています。すべてのクラスを1つのソースファイルにまとめた簡単な計算機を作成しました。それはうまく機能し、私はそれをかなり誇りに思っていると思います:)私はこのようなものを作るもっと簡単な方法があることを知っていますが、私は練習の唯一の目的のために代わりにクラスとオブジェクトを使用しました。これが電卓の私のコードです。また、長い投稿を本当にお詫びします:/これまで読んでくださった方、特に私を少し助けてくださった方に感謝します!

これが1つのソースファイルの私のコードです:

#include <iostream>
using namespace std;

class Addition {
public:
float add (float x, float y) {
float sum;
sum=x+y;
return sum;
}


};


class Subtraction {
public:
float subtract (float x, float y) {
float dif;
dif=x-y;
return dif;
}

};

class Multiplication {
public:
float multiply (float x, float y) {
float prod;
prod=x*y;
return prod;
}

};

class Division {
public:
float divide (float x, float y) {
float quot;
quot=x/y;
return quot;
}
};

int op;
char cont;

int main()
{

do {
cout<<"Welcome to C++ Calculator v2!"<<endl;
cout<<"Select the number for which operation you want to use: "<<endl;
cout<<"1-Addition"<<endl;
cout<<"2-Subtraction"<<endl;
cout<<"3-Mutliplication"<<endl;
cout<<"4-Division"<<endl;
cin>>op;

if (op==1) {
float num1;
float num2;
Addition addobj;
cout<<"You have chosen Addition!"<<endl;
cout<<"Enter the first number you want to add: "<<endl;
cin>>num1;
cout<<"Enter the second number you wat to add: "<<endl;
cin>>num2;
float ans=addobj.add(num1, num2);
cout<<"The sum is "<<ans<<endl;
cout<<"Do you wish to continue? Y/N"<<endl;
cin>>cont;
}

if (op==2) {
float num1;
float num2;
Subtraction subobj;
cout<<"You have chosen Subtraction!"<<endl;
cout<<"Enter the first number you want to subtract: "<<endl;
cin>>num1;
cout<<"Enter the second number you want to subtract: "<<endl;
cin>>num2;
float ans=subobj.subtract(num1, num2);
cout<<"The difference is "<<ans<<endl;
cout<<"Do you wish to continue? Y/N"<<endl;
cin>>cont;
}

if (op==3) {
float num1;
float num2;
Multiplication multobj;
cout<<"You have chosen Multiplication!"<<endl;
cout<<"Enter the first number you want to multiply: "<<endl;
cin>>num1;
cout<<"Enter the second number you want to multiply: "<<endl;
cin>>num2;
float ans=multobj.multiply(num1, num2);
cout<<"The product is "<<ans<<endl;
cout<<"Do you wish to continue? Y/N"<<endl;
cin>>cont;
}

if (op==4) {
float num1;
float num2;
Division divobj;
cout<<"You have chosen Division!"<<endl;
cout<<"Enter the first number you want to divide: "<<endl;
cin>>num1;
cout<<"Enter the second number you want to divide: "<<endl;
cin>>num2;
float ans=divobj.divide(num1, num2);
cout<<"The quotient is "<<ans<<endl;
cout<<"Do you wish to continue? Y/N"<<endl;
cin>>cont;
}

} while (cont=='Y'||cont=='y');
if (cont=='N'||'n') {
cout<<"Thanks for using my program, goodbye!"<<endl;
}


return 0;

}
4

4 に答える 4

7

わかりました、あなたの例を実行してお見せします:

減算.h

class Subtraction 
{
public:
 float subtract (float x, float y);
};

減算.cxx

#include "subtraction.h"

float Subtraction::subtract (float x, float y)
{     
  float dif;
  dif=x-y;
  return dif;    
}

乗算.h

class Multiplication 
{
public:
  float multiply (float x, float y);
};

乗算.cxx

#include "multiplication.h"

float Multiplication::multiply (float x, float y)
{
  float prod;
  prod=x*y;
  return prod;
}

等々...

main.cxx

#include "subtraction.h"
#include "multiplication.h"

int main()
{
 //use the classes just as before.
}

また、簡単にするために、ここではコードに入れませんでしたが、先に進んで、宣言が 1 回だけ含まれるようにする習慣を身につけてください。大規模なプロジェクトでは、これらの安全対策を講じないと、非常に厄介な問題になる可能性があります。

#ifndef SUBTRACTION_H
#define SUBTRACTION_H

class Subtraction
{
     ....
};
#endif /*SUBTRACTION_H*/
于 2012-08-09T13:53:59.717 に答える
2

これはジョナサンの例のようなものです(簡潔にするためにインクルードガードを追加しませんでしたが、間違いなく追加します!)が、重複を削除し、学習の喜びのためにOOを追加しました。これは確かに実際の計算機の実装方法ではありませんが、十分に研究すれば、C++についての理解が深まると思います。

mathoperation.h:

  //a base class!
class MathOperation
{
public:
  virtual float doit( float x, float y ) const = 0;
};

subrtaction.h:

class Subtraction : public MathOperation
{
public:
  float doit( float x, float y ) const;
};

add.h:

class Addition : public MathOperation
{
public:
  float doit( float x, float y ) const;
};

減算.cpp:

#include "subtraction.h"
float Subtraction::doit( float x, float y ) const { return x - y; }

add.cpp:

#include "addition.h"
float Subtraction::doit( float x, float y ) const { return x + y; }

main.cpp:

#include <iostream>
#include <string>
  //yes this saves typing, but there reasons not to use it.. search SO!
using namespace std;

  //this one avoids you having to copy/paste the similar parts
void DoIt( const MathOperation& op, const std::string& opName, const std::string& verb, const std::string& resultName )
{
  cout << "You have chosen " << opName << "!" << endl;

  cout<<"Enter the first number you want to " << verb << ": "<< endl;

    //here you should actually check if the user really types in a number, and not    "blablabla"
    //and off course, put it in a seperate function so you can reuse it for num2
  float num1;
  cin>>num1;

  float num2;
  cout<<"Enter the second number you wat to " << verb << ": "<< endl;
  cin>>num2;

  cout<<"The " << resultName << " is " << op.doit( num1, num2 ) <<endl;
}

int main()
{
int op;
char cont = 'n';

do {
  cout<<"Welcome to C++ Calculator v2!"<<endl;
  cout<<"Select the number for which operation you want to use: "<<endl;
  cout<<"1-Addition"<<endl;
  cout<<"2-Subtraction"<<endl;
  cout<<"3-Mutliplication"<<endl;
  cout<<"4-Division"<<endl;
  cin>>op;

    //see how much shorter this is?
  if( op == 1 )
    DoIt( Addition(), "Addition", "add", "sum" );
  else if (op==2)
    DoIt( Subtraction(), "Subtraction", "subtract", "difference" );
  else
    cout << "Sorry I don't know this number" << endl;

  cout<<"Do you wish to continue? Y/N"<<endl;
  cin>>cont;

} while (cont=='Y'||cont=='y');

cout<<"Thanks for using my program, goodbye!"<<endl;
return 0;
}
于 2012-08-09T14:14:52.070 に答える
0

クラスと同じようにファイルに名前を付けるとよいでしょう。クラスが短いため、あなたの場合はあまり良い考えではありませんが、各クラスには独自の2つのファイルが必要です-たとえば、Subtraction.hとSubtraction.cpp。.h ファイルには、宣言のみを配置する必要があります-あなたの場合: class Subtraction { public: float subtract (float , float); }

.cpp ファイルには、.h ファイルを含めて実装を配置する必要があります。あなたの場合:

float Substraction::subtract (float x, float y) { float dif; dif=x-y; return dif; }

C++ ヘッダー ファイル、コード分離、C++ヘッダー ファイルと .cpp ファイルがある理由も参照してください。

これが少し役立つことを願っています!:)

于 2012-08-09T13:51:55.393 に答える
0

ファイルごとに public クラスを 1 つだけ持つことをお勧めします。慣例により、ファイル名はクラス名と同じです (ファイルでいくつかの定義が行われている場合は、.h .hh または .hpp のような拡張子が付きます)。

さまざまなクラスをさまざまなファイルに入れたい場合は、単純なテキスト エディターが役立ちます。

于 2012-08-09T13:52:19.163 に答える