c 關於物件之間的賦值

2025-02-26 22:05:16 字數 3074 閱讀 9684

1樓:龐秀花禹子

c++有深拷貝和淺拷貝之分。

淺拷貝,就是想你提到的用=將乙個物件a直接傳遞給另乙個物件b,例如a=b,這樣只是把b和a都指向了同乙個記憶體區域,一旦b的內容發生改變,則a也會跟著改變。

深拷貝,則需要new出來乙個新的區域,例如cmyclassa=newcmyclass();複製建構函式的目的是將整個b的區域資料全都複製給a,這樣的話a相當於轉殖出b,兩者就真正意義上的相等,但一方資料改變後,不影響另一方。

另外提到的:

這樣做表示是全域性作用域,如果放在這裡可能確實不太妥當。

2樓:檢秀榮辛環

物件賦值:預設賦值操作符是把物件的每個資料成員都賦值。

有動態記憶體分配的舉例。

class a

a()private:

int *p;

int main()

a a1, a2;

a2 = a1;

return 0;

此時a2=a1這一句,a2原來的指標p丟失,記憶體洩漏。最後a1、a2析構的時候,原來被delete操作符刪兩次,可能出錯。

c++裡面,含有陣列的類物件是怎麼賦值的?

3樓:網友

含有陣列的類物件可以通過以下方法賦值:

通過構造賦值。

例如:class a

public:

a(int a, int n)

for(int i = 0; i < n; i++)m_int[i] = a[i];}

int m_int[5];

使用:int a[5] = ;

a a(a, 5);

2. 直接賦值。

例如:class a

public:

int m_int[5];

使用:a a;

for(int i = 0; i < 5; i++)=i;

4樓:網友

c++類的物件陣列賦值問題 如下:

void main()

/這樣就可以賦初值。也可以使用成員函式乙個個設定。如下:

cs[0].setid(1);

cs[0].setname("張三");

cs[0].setscore(80); cs[1].setid(2);

cs[1].setname("李四");

cs[1].setscore(75); cs[2].setid(3);

cs[2].setname("王五");

cs[2].setscore(95); cs[3].setid(4);

cs[3].setname("小六");

cs[3].setscore(62);

sort(cs);

for(int i=0; i<4; i++)//選擇排序void sort(cstudent cs[4])}if(k != i)

//過載了=運算子。

return *this;

來自 (掏包) 愛戀而**。

5樓:網友

你直接類裡面給個介面不就完事了。。。

接受個陣列,然後轉存下,完事。

6樓:網友

c2 = c1原理是這兩個是類物件,就像int a,b;a=b;

7樓:王謙飛

真正的原理我也不清楚 但我知道執行c2 = c1後和的位址不同但元素值相同,所以只能是乙個乙個的賦值的。

c++中,相同類的物件為何能直接賦值?

8樓:網友

如果沒有顯式定義的話,預設建構函式、預設複製建構函式、預設解構函式、預設賦值運算子等等會隱式提供……

9樓:網友

賦值是由於有拷貝建構函式吧。

父類進行自動的向下型別轉換。

c++物件陣列賦值問題?

10樓:最大的寶寶

樓上已經指出你的問題了,重複定義。但是如果在乙個類中定義了類成員(name),建議你按初始化列表的方式來寫,比如在vs17下,可以這麼做:

class student

public:

student();

student(string n, int a);

private:

string name;

int age;

student::student(string n, int a) :name(n), age(a)

int main()

對於如下的初始化,最新的c++規則對於有沒有=號是無所謂的。

student s[2] = ,s[0] = ; // ok

return 0;

但對於vc6,就得這麼寫:

student s[2] = ;

c++物件賦值問題

11樓:網友

比如拿乙個建立連結串列舉例。

裡面有函式。

makelist();//建立連結串列 用動態方法showlist();//輸出連結串列。

destroylist();//銷燬連結串列。

用這個類建立物件a,b。

b=a;; // 程式到這裡會出錯。

類b被類a賦值後,如果你沒有過載操作符「=」,就沒有把動態分配的資料拷貝過去,這叫淺拷貝。

類b想要訪問動態資料時,是跑到類a建立的資料裡面訪問了。

類b想要訪問動態資料時,嚴重依賴類a。

也就是,當動態資料被類a銷燬後,b將無法呼叫那些動態分配的資料。

如果b不呼叫那些動態分配的資料,什麼事都沒有。

想解決這個問題,兩個建議。

1.建立專門拷貝的函式。

2.過載操作符"="。

這樣,即使類a把動態資料刪除了,類b也可以繼續進行動態資料的訪問。類a無論幹什麼,類b什麼事都沒有了。

12樓:sc黑色茉莉

如果物件裡有指標成員,那原始複製函式複製的就是指標值,共同指向乙個資料。所以應該重新定義,深度複製。

C字串內容賦值給C 的string類物件

char chr hello,world.或char chr hello,world.然後,string str chr 就行了,或者string str chr也行。樓主顯然沒有理解指標的作用啊,首先我先指出,樓主你宣告的是10個字元型別指標的變數,即宣告了10個指向字元型別的指標而非乙個可以容納...

c語言的賦值問題,C語言指標的賦值問題

上面的說法中,都存在錯誤或不足.1.首先 c a b 的意義是把 a 和 b 這兩個變數的內容 5 和 6 相加得 11,再把 11 這個結果值傳送至 變數 c 所在的儲存單元儲存起來 而不是你想像的 將 a 和 b 這兩個變數組合為一個變數作為 c,或者複製一份變數組合再作為 c.當你用int a...

關於vb中給變數賦值的語句,vb的賦值語句只能給變數賦值 這句話對嗎

灰原哀柯南君蘭 vb中的變數賦值語句是 a 1b a c b 1 如上,第一句的意思是把 1 賦值給a,第二句的意思是把 a 的值賦給 b 也就是b 1,最後ba b 1 的值賦 c c 2 拓展 vb中定義變數的語句如下 dim 變數名 as 資料型別 如 dim s as integer 定義一...