0

わかりました、私はC++にかなり慣れていないので、ヘッダーファイルについていくつか質問があります...

1.) ヘッダー ファイルで宣言する必要がある変数と宣言しない変数はどれですか。

2.) ヘッダー ファイルで変数を宣言する場合、extern を使用する必要がありますか?

これが私のヘッダーファイルです:

#ifndef MAIN_H
#define MAIN_H

class Main
{
public:
        int main(); //Constructor
        virtual ~Main(); //Destructor

        double initialVelocity;
        double initialAngle;

private:
        double degToRad(double angle);
        void simulate(double angle, double velocity);
};
#endif

そして、ここに私のMain.cppがあります

/*******************************************************************
 * This program will take input for initial velocity (fps), and a launch angle
 * based on this information, the current posotion of the object thrown will be
 * calculated until it hits the ground.
 *
 * 
 * Date: 30 August 2013
 * Version 1.0
 *
**/

# include "Main.h"
# include <iostream>
# include <fstream>
# include <cmath>
using namespace std;

/******************************************************************
 * General Variables
**/
const int GRAVITY_FACTOR = -16;
const int GROUND = 0;
const double PI = atan(1.0)*4;
double initialVelocity;
double initialAngle;

/******************************************************************
 * degToRad function.
 *
 * This function takes in an angle in degrees, and converts it to
 * radians.
 *
**/
double degToRad(double angle){
    return angle * (PI/180);
    }

/******************************************************************
 * simulate function.
 *
 * Takes in the angle in radians, and the velocity. Calculates the
 * path of the projectile, and displays it in the terminal.
 * 
**/
void simulate(double angle, double velocity){
    cout << "Entering Simulation" << endl;

    double time = 0;
    double x = 1;
    double y = 1;
    double veloUp = 0;
    double veloFo = 0;

    veloUp = (velocity*sin(angle));
    veloFo = (velocity*cos(angle));
    cout << "Angle in radians: " << angle << endl;
    cout << "Initial velocity upwards (fps): " << veloUp << endl;
    cout << "Initial velocity forward (fps): " << veloFo << endl;

    while(y >= GROUND){
        x = veloFo * time;
        y = GRAVITY_FACTOR*(time*time) + (veloUp * time);
        cout << "(x, y) at time " << time << " is (" << x << ", " << y << ")" <<  endl;
        ++time;
    } //while
    cout << "Leaving Simulation" << endl;
} //simulate

/***************************************************************************
 * The main function.
 *
 * Produces output to the console in order to coach the user on what to input.
**/
int main()
{
    cout << "Execution Beginning" << endl;
    cout << "Enter the inital velocity (feet per second):" << endl;
    cin >> initialVelocity;

    if(initialVelocity > 0){
        cout << "Good. " << initialVelocity << " is a valid value for the initial velocity." << endl;
    }
    else{
        cout << "ERROR: " << initialVelocity << " is not a valid value for the initial velocity." <<endl;
        return 0;
    }

    cout << "Enter the initial angle in degrees (from the horizontal):" << endl;
    cin >> initialAngle;

    if(initialAngle >= 0 && initialAngle <= 90){
        cout << "Good. " << initialAngle << " is a valid value for the initial angle." << endl;
    }
    else{
        cout << "ERROR: " << initialAngle << " is not a valid value for the initial angle." << endl;
        return 0;
    }

    simulate(degToRad(initialAngle), initialVelocity);

    cout << "Ending Execution" << endl;
return 0;
}

私が言ったように、私は C++ を初めて使用します。この 2 つがどのように相互作用するか、またはより効率的に相互作用させるために何をすべきかを誰か説明してもらえますか。プログラムはコンパイルされ、正しく実行されますが、プロトコルと .cpp ファイルを含むヘッダー ファイルの使用法については不明です。また、どの関数と変数をヘッダーのプライベート セクションに配置し、どれをパブリックに配置する必要がありますか? ありがとうございました。

4

2 に答える 2

0

ヘッダー ファイルでは、cpp ファイルに実装するすべてのクラス フィールドと関数を宣言できます。クラス関数内で使用する変数を宣言するべきではありません(一時変数のようなものがあるため)が、プログラムで使用する const 変数を宣言できます(そして宣言する必要があります)。

extern を使用しないでください。extern を定義していない変数には、extern を使用しないでください。extern の場合、変数がプログラムの別の場所で定義されていることを意味するため、コンパイラはそれについて気にしません。extern は、C のように C++ コードを処理する関数にも使用されます。

extern "C" { //コード。}

またextern "C" int func(int a);

結論として、.h ファイル内の delcare const 変数と、classes.else - cpp 内 (インラインでない場合)。あなたの場合:

const int GRAVITY_FACTOR = -16;
const int GROUND = 0;
const double PI = atan(1.0)*4;
are better to be in the .h file

+ 再度宣言しないでください:

double initialVelocity;
double initialAngle;

すでに.hファイルにあります。

それが役に立ったことを願っています..

于 2013-09-04T18:48:56.107 に答える