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 定義一...