不能作為類的成員的是?

General 更新 2024-06-10

c++編程,為什麼自身類的對象不可以作為該類的成員,自身類的指針或引用卻可以?

因為如果類包含自身類的對象,存在無限初始化的問題。

構造一個類的對象是,先構造成員變量,然後再調用自身的構造函數,如果類包含自身的的對象,那麼在調用構造函數之前,需要先構造自身類的對象。而構造自身類的對象時,又得先構造自身的對象,然後調用其構造函數……

自身類的對象不可以作為某類的成員嗎,還是自身類的指針,自身類的引用

不能定義該類型的對象,只能用於定義指向該類型的指針及引用,或用於聲明(而不是定義)使用該類型作為形參類型或返回類型的函數。

class A{public:private:A *pA;//合法A dosomething( A& ia);//合法A iA;//不-合法};

C++類中不能有本類對象作為成員變量嗎,可以的話要怎麼寫?

這樣滿足你的要求不?

class A{public:A(){a = new A();};~A();A *a;};

類的數據成員:只有其他類的對象,才可以作為該類的成員,即作為該類的成員對象而存在

class time

{

public:

int hour;

};

class date

{

public:

time times; //對date類來說,time類是其他類,它的對象可以作為它的成員;。當然如果time沒定義完那就當然不行。

//date dates; //date類的對象不能作為date 類的成員;試想如果可以的話的話,date裡面有一個dates,裡面的這個dates裡面也有一個dates,它裡面還有一個dates....這對象就是無窮大的了;

Date * dates //這是可以的,因為指針只佔四個字節,代表一個地址而已。

};

“除一個類本身之外的類的對象,才可以作為該類的成員,即作為該類的成員對象而存在。自身類的對象是不可以作為自身類的成員存在的,但自身類的指針可以。”

C++ 一個類的對象不能訪問該類的私有函數和成員嗎?

只能在內部使用,規則的設立是為了防止數據洩漏,你想象要是這樣你能訪問不就是說在外面就能引用乃至修改了,這是不允許的

private在定義類的時候,其類型只能由類的成員函數使用,這樣如果類中沒有相應的函數,在外面是獲取不到該值的,

其是定義看明白了也就差不多懂了

類對象作為自身的成員變量,java可以,c++不可以,為什麼,如下java可以

我嘞個去~,你瘋狂了,直接給我機器乾死機了~。你試著在main方法裡 TestClass test = new TestClass(); 然後再運行,你就知道java裡也是不可以的,更準確點兒說,應該稱之為是 不推薦的。 也就是為什麼C++不可以啊

c++ 類的數據成員不能使用 auto、extern和register等進行修飾 10分

怎麼說……沒有實驗,你可以自己實驗一下,不過應該auto,extern和register都是不能用在類成員變量上的。

原因很簡單,

auto表示自動推斷類型,然而作為類的成員,其聲明並不會賦值,所以無法去推斷其類型

extern表示外部定義,這不太可能(實際上我覺得是不可能)發生在類的聲明中,否則它不會作為類的成員來聲明(因為extern表示它是外部的,那麼外部的怎麼會是這個類的成員呢?)

register表示儘可能讓這個變量保存在寄存器中,這是不可能的,寄存器是有限的,類的成員可能有很多,類又要儲存在內存中,不可能讓其某個成員單獨存在寄存器中,更不必說多個成員儲存在其中了。而且register關鍵字用到的時候很少了,因為編譯器有自主選擇忽略這個關鍵字的權利。而且通常這並不會帶來多麼大的速度提升,還可能導致效率反而低下。

static表示靜態成員,即不依賴於任何一個類的實例而存在,儲存在內存中的靜態變量區,因此可以不借助類的實例來調用,所有的類也共享著同一塊內存。

靜態函數也是如此,所以靜態函數只能操作類的靜態變量(因為它的定義不依賴某個具體的實例,也就不具備直接操作某個具體實例的能力)。

const表示常量,可以對類的成員使用,對數據成員使用表示該數據成員一旦初始化不能被修改。對類的成員函數使用,表示該函數對類的成員只讀(也就是不改變類的數據)

C# 中類的成員有哪些?

類(class)是C#類型中最基礎的類型。類是一個數據結構,將狀態(字段)和行為(方法和其他函數成員)組合在一個單元中。類提供了用於動態創建類實例的定義,也就是對象(object)。類支持繼承(inheritance)和多態(polymorphism),即派生類能夠擴展和特殊化基類的機制。

使用類聲明可以創建新的類。類聲明以一個聲明頭開始,其組成方式如下:先是指定類的特性和修飾符,後跟類的名字,基類(如果有的話)的礎字,以及被該類實現的接口名。聲明頭後面就是類體了,它由一組包含在大括號({})中的成員聲明組成。

下面是一個名為Point的簡單類的聲明:

public class Point

{

public int x, y;

public Point(int x, int y){

this.x = x;

this.y = y;

}

}

使用new運算符創建類的實例,它將為新實例分配內存,調用構造函數初始化實例,並且返回對該實例的引用。下面的語句創建兩個Point對象,並且將那些對象的引用保存到兩個變量中:

Point p1 = new Point(0, 0);

Point p2 = new Point(10, 20);

當不再使用對象時,該對象所佔的內存將被自動回收。在C#中,沒有必要也不可能顯式地釋放對象。

1.成員分類:

(1)時間:

類的成員或者是靜態成員(static member)----屬於類。

實例成員(instance member)----屬於對象。

(2)空間:

屬性。

方法。

索引。

代理。

事件。

嵌套類。

字段。

2.成員的可訪問性:

類的每個成員都有關聯的可訪問性,它控制能夠訪問該成員的程序文本區域。

public :訪問不受限制。

protected :訪問僅限於包含類或從包含類派生的類型。

internal :訪問僅限於當前程序集。

protected internal :訪問僅限於從包含類派生的當前程序集或類型。

private :訪問僅限於包含類。

3.成員的修飾符:

abstract:指示該方法或屬性沒有實現。

sealed:密封方法。可以防止在派生類中對該方法的override(重載)。不是類的每個成員方法都可以作為密封方法密封方法,必須對基類的虛方法進行重載,提供具體的實現方法。所以,在方法的聲明中,sealed修飾符總是和override修飾符同時使用。

delegate:委託。用來定義一個函數指針。C#中的事件驅動是基於delegate + event的。

const:指定該成員的值只讀不允許修改。

event:聲明一個事件。

extern:指示方法在外部實現。

override:重寫。對由基類繼承成員的新實現。

readonly:指示一個域只能在聲明時以及相同類的內部被賦值。

static:指示一個成員屬於類型本身,而不是屬於特定的對象。即在定義後可不經實例化,就可使用。

virtual:指示一個方法或存取器的實現可以在繼承類中被覆蓋。

new:在派生類中隱藏指定的基類成員,從而實現重寫的功能。 若要隱藏繼承類的成員,請使用相同名稱在派生類中聲明該成員,並用 new 修飾符修飾它。

4.方法

方法(method)是一種用於實現可以由對象或類執行的計算或操作的成員。靜態方法(static method)只能通過類來訪問。實例方法(instance method)則要通過類的實例訪問。

(1).方法的參數

參數用於將值或者引用變量傳遞給方法。......

一個類中可以使用本類為成員變量嗎?如果不能,該怎麼解決呢?

不可以.

自己是自己的一部分, 邏輯上也說不過去.

c++ 為什麼不能在類類對static成員定義? 我看的都是類內聲明,類外定義

你好,靜態數據成員為各對象所共有,而不只屬於某個對象的成員,所有對象都可以引用它。靜態的數據成員在內存中只佔一份空間,而不是每個對象都分別為它保留一份空間。所以靜態數據成員只能在類體外進行初始化。

再複製一下看到的別人的解釋吧。靜態數據成員對於所有類對象來說只有一份,因此不能在類體內隨著每個類對象的初始化而初始化,而是需要在全局數據空間中進行單獨的初始化,並且只能存在一份實例。希望能幫助到你。

相關問題答案
不能作為類的成員的是?
“生活是美好的,我們應該享受生活。”和“我們不能因為遇到暫時的困難就意志消沉”這兩句話英語怎麼翻譯 ?
哪個不是萬事屋的成員?
為什麼不能早上問做生意的人要錢 ?
作為怎樣理性的愛國?
萬事屋的成員有哪些?
手機錄音能作為證據嗎?
社區居委會的成員有哪?
成員的同義詞?
錄音能作為法庭證據嗎?