首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 巢狀結構體與靜態對象定義詳解:區別繼承與實例化

     編輯:程式設計綜合問答

代碼場景

class AP_Vehicle {
public:
    struct FixedWing { /* ... */ };
    struct MultiCopter { AP_Int16 angle_max; };
};

static AP_Vehicle::MultiCopter aparm; // 這行代碼含義?

提問者誤以為 aparm 是繼承了 MultiCopter 的函數/類。

核心概念辨析

1. 巢狀類型 ≠ 繼承

  • FixedWing 和 MultiCopter 是 AP_Vehicle 作用域內的獨立結構體類型(巢狀類型)。
  • 它們與外層類 無「是一種」關係,只是邏輯歸屬與名字空間隔離。

2. 繼承語法

class Derived : public Base { /* ... */ };

需在類定義時用冒號指定基類。巢狀類定義中 沒有冒號繼承列表,故無繼承。

3. 靜態對象定義

static AP_Vehicle::MultiCopter aparm; 含義:

  • AP_Vehicle::MultiCopter:作用域解析,指定類型為外層類內部的 MultiCopter。
  • aparm:定義一個該類型的靜態存儲期對象(變量)。
  • static:若在全局/命名空間作用域,表示內部鏈接(僅本編譯單元可見);若在類內,表示靜態成員變量(需類外定義)。

結論:這只是創建了一個名為 aparm 的 MultiCopter 結構體變量,與繼承毫無關係。

最佳實踐

  • 巢狀類型用於邏輯分組(如 Vehicle::Params::FixedWing)。
  • 需繼承時顯式寫 : public Base。
  • 靜態成員變量必須在類外單獨定義一次(AP_Vehicle::MultiCopter AP_Vehicle::aparm;)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved