struct
宣言さmain.cpp
れたインをクラスヘッダーファイルに渡す標準/正しい方法を知りたいのですが、ヘッダーファイル内のその構造の内容を変更したいと思います。以下は私がやりたいことの簡単な例であり、それは正しく機能します。しかし、私はそれを行うためのより良い、より標準的な方法があるかどうか知りたいと思いました。私はC ++にあまり詳しくないので、現在の実装に隠れた欠陥があるかどうかはわかりません。
num.h
struct A {
int x, y;
};
class Num {
public:
void change(struct A& s, int t){
s.x = t;
}
int getNum(int b){
return b;
}
};
main.cpp
#include <iostream>
#include "num.h"
using namespace std;
int main(){
Num n;
A a;
a.x = 8;
a.y = 9;
cout << n.getNum(a.x) << endl; \\outputs 8
n.change(a, 5);
cout << n.getNum(a.x) << endl; \\outouts 5
return 0;
}
基本的に、構造をとファイルのA
両方に表示して、両方が構造を変更できるようにします。現在、私の解決策は、ヘッダーファイルがファイルの拡張子に似ているため、ヘッダーファイルの先頭で宣言することでした。これは、すべてのコードの最初で宣言したかのように、すべてに表示されます。しかし、これが最善の方法かどうかはわかりません。フィードバックをいただければ幸いです。.cpp
.h
struct A
.cpp
struct A
これは、ヘッダーファイルとは何か、struct
定義は何をするのかという誤解に帰着すると思います。あなたの例では:
struct A {
int x, y;
};
コンパイラーにとって、これは「2つの整数値を含む構造体がx
ありy
、それを呼び出すA
」と読みます。メモリは割り当てられません。コードは実行されません。A
後で話すときのために、それはただそれを心に留めています。
これで、Num
コードを実際に分割して、宣言と実装を分離する必要があります。
// num.h
class Num {
public:
void change(struct A& s, int t);
int getNum(int b);
};
それがコンパイラに「Num
2つの関数を持つと呼ばれるクラスがあります。ここでchange
、A
構造体と整数への参照をgetNum
取り、整数を取り、整数を返します」と読みます。同様に、コードを実行したり、メモリに表示したりすることはありません。後で使用される仕様にすぎません。
次に、それがnum.cpp
どのように実装されているかを説明します。
#include "num.h"
void Num::change(struct A& s, int t) {
s.x = t;
}
int Num::getNum(int b) {
return b;
}
これは、などの他のコードから呼び出すことができる関数、実行可能コードを定義しますmain()
。このchange
メソッドは、「と呼ばれる構造体定義を使用してA
、x
整数を引数と同じ値に設定する」と読み取りますt
。
これは、値を変更する限り「構造体を変更」しますが、の構造は変更しませんstruct
。技術的には、構造体の内容を変更していますが、構造体自体は変更していません。そのため、多くの人があなたの質問について混乱しています。
一部の言語では、定義後に構造を変更できますが、C ++はそれらの言語の1つではありません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加