一部の混乱を解消するためだけに!そして簡単にピッキング!ここにいくつかのポイントがあります!
構造体で!カプセル化と可視性の演算子(プライベートまたはパブリックにする)を持つことができます!クラスと同じように!
したがって、一部の人が言う、またはオンラインで見つけるかもしれないという声明は、次のようになります。違いの1つは、構造には可視性演算子がなく、データを非表示にする機能がないということです。
クラスと同じようにメソッドを持つことができます!
以下のコードを実行してください!そして、あなたはそれがすべてうまくコンパイルされることを確認することができます!そして、すべてうまく実行します!そして、構造体全体がクラスと同じように機能します!
主な違いは、可視性モードのデフォルト設定だけです。
構造物はそれを公開しています!デフォルトでプライベートをクラス化します!
#include<iostream>
#include<string>
using namespace std;
int main(int argv, char * argc[]) {
struct {
private:
bool _iamSuperPrivate = true;
void _sayHallo() {
cout << "Hallo mein Bruder!" << endl;
}
public:
string helloAddress = "";
void sayHellow() {
cout << "Hellow!" << endl;
if (this->helloAddress != "") {
cout << this->helloAddress << endl;
}
this->_sayHallo();
}
bool isSuperPrivateWorking() {
return this->_iamSuperPrivate;
}
} testStruct;
testStruct.helloAddress = "my Friend!";
testStruct.sayHellow();
if (testStruct.isSuperPrivateWorking()) {
cout << "Super private is working all well!" << endl;
} else {
cout << "Super private not working LOL !!!" << endl;
}
return 0;
}
記憶の中でそれらは同じです!
私は自分自身をチェックしませんでした!しかし、同じことをすると言う人もいます!コンパイルされたアセンブリコードは、構造体とクラスの間で同じになります!(チェックする!)
任意のクラスを取得し、名前をtypedef structに変更します!コードは引き続き同じように機能することがわかります。
class Client {
}
Client client(...);
=>
typedef struct Client {
....
} Client;
Client client(...);
そうすれば、すべて同じように機能します!少なくとも私はそれがgccで行われることを知っています!
あなたはテストすることができます!あなたのプラットフォームで!