1. ホーム
  2. c++

C++: 構造体はクラスを継承できるのか?

2023-11-09 10:30:29

質問

使用しているAPIの実装を見ています。

構造体がクラスを継承していることに気づき、熟考しているところです...。

まず、一緒に勉強したC++のマニュアルには、構造体が他の構造体を継承することは書いてありませんでした。

struct A {};
struct B : public A {};

このような場合、struct Bはstruct Aのデータをすべて継承することになると思いますが、structの中でpublic/privateのメンバを宣言することはできるのでしょうか?

しかし、こんなことに気づきました。

 class A {};
 struct B : public A {};  

私のオンラインC++マニュアルから。

クラスはデータ構造を拡張した概念で、データだけを保持するのではなく、その中に 両方を保持することができます。 データ と関数の両方が

クラスAがいくつかのメンバ関数を持つ場合でも、上記の継承は有効ですか?構造体に継承された場合、その関数はどうなるのでしょうか? また、逆にクラスが構造体を継承した場合はどうなるのでしょうか?

実務的には、こんな感じです。

struct user_messages {
  std::list<std::string> messages;
};

そして、以前はこのように反復処理をしていました。 foreach message in user_messages.messages .

構造体にメンバ関数を追加したい場合、その宣言を変更してクラスに "昇格" して関数を追加しても、以前のように user_messages.messages を反復処理できますか?

明らかに、私はまだ初心者で、構造体とクラスがどのように相互作用するか、この 2 つの実用的な違いは何か、継承ルールは何かについて、まだ不明です...。

どのように解決するのですか?

C++では、構造体はクラスを継承することができます。

C++では クラスと構造体は、デフォルトの動作以外は同じです。 であり、継承とメンバのアクセスレベルに関しても同じです。

C++のクラス

  • デフォルトの継承 = プライベート
  • メンバ変数および関数のデフォルトアクセスレベル = プライベート

C++構造体

  • デフォルトの継承 公開
  • メンバ変数と関数のデフォルトアクセスレベル = (英語) パブリック