簡體   English   中英

類(具有 static 成員)在 c++ 中初始化

[英]class(with static member) initialization in c++

我試圖理解friend元函數,發現自己編寫了以下代碼

雖然我已經理解了友元函數,但這段代碼給我留下了新的問題:

  1. 當我沒有實例化任何 object 時,class 如何在這里初始化

我知道static成員由 class 的所有對象共享,並在創建第一個 object 時初始化為零

  1. 變量base_iderived_i在什么時候被分配給代碼中的相應值

我想它發生在return derived::derived_i + derived::base_i;

  1. 如果是這樣,此時是否也為 class 的所有其他成員分配 memory,在這種情況下還特別為newVar
#include <iostream>

class base
{
private:
    static int base_i;
    float newVar;
public:
    friend int addClasses();
};

int base::base_i = 5;

class derived : private base
{
private:
    static int derived_i;
public:
    friend int addClasses();
};

int derived::derived_i = 3;

int addClasses()
{
    return derived::derived_i + derived::base_i;
}

int main()
{
    std::cout<<addClasses()<<std::endl;
}

當我沒有實例化任何 object 時,class 如何在這里初始化

您已經在其定義中初始化了變量:

 int base::base_i = 5; // <-- the initialiser

語言實現負責 rest。


變量 base_i 和 derived_i 在什么時候被分配給代碼中的相應值

在調用main之前初始化具有 static 存儲持續時間的非局部變量。


這是否也為 class 的所有其他成員分配了 memory,在這種情況下也特別為 newVar

當 class 的實例 memory 被分配時,非靜態成員變量的 Memory 被“分配”。 您沒有在示例程序中實例化 class。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM