Премини към съдържанието
Yehet

Разлика между конструктор за присвояване и конструктор за копиране

Препоръчан отговор


Здравейте! Каква е разликата между конструктора за присвояване и конструктора за копиране?

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Копиране имаме, когато се заделя динамична памет за нов обект, и тази памет се инициализира като копие на вече съществуващ обект.

Присвояване имаме, когато на вече съществуващ обект се присвоява съдържанието на друг съществуващ обект.

  • Харесва ми 2

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Въпросът е грешно формулиран - няма конструктор за присвояване, за целта се ползва предефиниран оператор - operator= със стандартен параметър. При присвояването може да се използва и копиращия конструктор, зависи от дизайна на класа.

Редактирано от flare (преглед на промените)
  • Харесва ми 1

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Копи конструкторът и конструкторът за присвояване се различават по това, че при първото се изпозва за инициализиране на новосъздаден обект, а второто асайнва стойностите на променливите от един обект и може да се използвакогато си поискаш. При второто обаче трябва да овърлоуднеш оператора =.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
преди 56 минути, frozener написа:

При второто обаче трябва да овърлоуднеш оператора =.

Тоест изобщо не е конструктор - щото при присвояване може изобщо да няма "конструиране" на обект.


  • Харесва ми 1

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Говорете си с примери, защото виждам, че някой ще се обърка, това какво извиква

class a {};
	a b;
	a c = b;

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Регистрирайте се или влезете в профила си за да коментирате

Трябва да имате регистрация за да може да коментирате това

Регистрирайте се

Създайте нова регистрация в нашия форум. Лесно е!

Нова регистрация

Вход

Имате регистрация? Влезте от тук.

Вход


  • Подобни теми

    • от Hadjimehmed Shener
      Здравейте, трябва да представя курсова работа тази седмица . Направих си програмата, обаче имам едно условие още , което гласи "използвате запитване за името на играча и съхранявате резултатите в текстов файл" . Моля помогнете , ако е нужно ще ви пратя и целия код
    • от Магдаленаг
      Здравейте ) който разбира от програмиране на C++ да я драсне набързо задачката/ако може с #include<stdio.h>/ Благодаря предварително))
      Да се състави програма за състезание по ориентиране на ученици, която поддържа следната информация за участниците:
      име, ЕГН, клас, училище, брой точки;
      и извършва следните операции:
      създава нов празен файл; добавя нова информация за участници и изтрива ненужната за отказали се; извежда имената на всички ученици от дадено училище; извежда името и училището за всички момичета, които имат повече от 20 точки.
    • от Maria11
      Здравейте, имам следната задача:
      1. Да се състави абстрактен шаблонен клас Comparable сравнител за по-малко;
      Виртуална предикатна функция compareTo(T obj).
      2. Да се състави шаблонен клас CTableColumn - описател на колона на таблица, наследник на два конкретни шаблона на Comparable:
      CTableColumn и int.
      Частни членове:
      string m_strRowName - име на ред
      string m_strColumnName - име на колона
      int m_contents - съдържание
      Конструктори:
      Подразбиращ се, Експлицитен, Копиращ
      Публични членове:
      accessors: getRowNameq getColumnName, getValue
      mutator: setValue
      преобразувател на елементите в стринг: string toString() ////////
      предикатна за празно име на колоната или ред isEmpty() ////////
      виртуалните функции compareTo(CTableColumn toObj) compareTo(int Obj) ////////
      Много се затруднявам на шаблонен клас. Имам нужда от помощ за него, не знам нищо за него.
      #include <iostream> #include <string> #include <ostream> #include <fstream> using namespace std; templete <class T> ///////1. { public: virtual void compareTo(T obj) { bool operator < (const Comparable& A)const { return obj < A.obj; } } }; templete <class T> //////2. class CTableColumn { private: string m_strRowName; string m_strColumnName; int m_contents; CTableColumn(){} CTableColumn(string red, sting kolona, int sudurjanie) { m_strRowName = red; m_strColumnName = kolona; m_contents = sudurjanie; } CTableColumn(const CTableColumn& A) { m_strRowName = A.m_strRowName; m_strColumnName = A.m_strColumnName; m_contents = A.m_contents; } public: string getRowName() const {return m_strRowName;} string m_strColumnName() const {rturn m_strColumnName;} int getValue() const {return m_contents;} void setValue(int s) {m_contents = s;} //........... //........... //........... }; Ако може помогнете ми за string toString(), isEmpty() и виртуалните функции compareTo(CTableColumn toObj) compareTo(int Obj).
       
    • от 87975865869
      Цяла седмица се опитвам да си завърша курсовата задача по програмиране. Последния срок е утре до 17:00 а съм до никъде. Надробих някакви простотии но не вярвам да ми донесат каквото и да е... Бих бил много благодарен на всякаква помощ.

      Ето го и условието:
      Съставете програма с функция main() и избор чрез меню на функции за:
      - въвеждане от клавиатура данните на К студента (К<=25) от група: фак.номер, оценки по 4 дисциплини от зимен семестър, възраст и съхраняването им в масив GR(25,6) като (GR(I,0) - за фак. номер, (GR(I,1) до (GR(I,4) - за оценка, (GR(I,5) за възраст.
      - изчисляване и извеждане на среден успех по избрана дисциплина; 
      - изчисляване и извеждане на среден успех на студент по зададен фак. номер;
      - намиране и извеждане на броя на студентите над зададена възраст
      - извеждане на екран съдържанието на масива със съответни текст и формати. 

      Когато видите състоянието на кода ми ще се разберете защо публикувам тема.Ако не друго - поне ще се посмеете 
      Ето го и него:
      #include <iostream> #include <string> using namespace std; int input(int x[]); int add(int a); void studentID(int a); int main() { int ch, GR[25][6], n; do { cout << "\Show student data: \n"; cout << "\Show GPA for subject : \n"; cout << "\Show GPA for a FN: \n"; cout << "\Show amount of students over the age of 18: \n"; cout << "\Exit"; do { cout << "\n\nChoice: \n"; cin >> ch; } } int input(int x[]) { int i, n = 0; do { cout << "\n Input size: "; cin >> n; } while (1 > n || n > 25); for (int i = 0; i < n; i++) { cout << "\n Enter element [" << i + 1 << "] = "; cin >> x[i]; } return n; } int add(int a) { char iz; while (1) { cout << "Insert ID:"; cin >> rab[a].id; cout << "Insert grade1:"; cin >> rab[a].g1; cout << "Insert grade2:"; cin >> rab[a].gr2; cout << "Insert grade3:"; cin >> rab[a].gr3; cout << "Insert grade4:"; cin >> rab[a].gr4; cout << "Insert age:"; cin >> rab[a].age; a++; cout << endl << "Do you want to add a new student?" << endl << "type (y) for yes and (n) for no:"; cin >> iz; if (iz == 'n') { return a; break; } return 0; } } void studentID(int a) { char ID[5]; // cout<<a; cout << "Insert ID:"; cin >> studentID; for (int i = 0; i<a; i++) if (!strcmp(studentID, rab[i].studentID)) { cout << "Name:" << rab[i].name << endl << "ID:" << rab[i].id << endl << "Age:" << rab[i].god << endl; } return; } Намерих същата задача във форума ви но е решена без функции а по следния начин:
      #include <iostream> using namespace std; int main() { int K=0; int choice=0; cout << "Vivedete broq na studentite(1-25): "; cin >> K; double GR[K][6]; for(int i=0; i<K; ++i) for(int j=0; j<6; ++j) { cout << "GR("<<i<<","<<j<<") = "; cin >> GR[i][j]; } do { cout << "1. Izchislqvane i izvejdane na sredniq uspeh po izbrana disiplina" << endl; cout << "2. Izchislqvane i izvejdane na sredniq uspeh na student po dazaden vakulteten nomer" << endl; cout << "3. Namirane i izvejdane na broq na studentite nad zadadena vizrast." << endl; cout << "4. Izvejdane na ekrana sidirjanieto na masiwa sys siotvetniq tekst i formati." << endl; cout << "Molq, izberete obciq(1-4): "; cin >> choice; }while(choice>4 || choice<1); if(choice == 1) { int disiplina=0; double srUspeh=0; cout << "Izberete disiplina(1-4): "; cin >> disiplina; if(disiplina > 5 || disiplina < 1) cout << "Greshen vhod!" << endl; for(int i=0; i<K; ++i) srUspeh+=GR[i][disiplina]; cout << "Sredniq uspeh po disiplina " << disiplina << " e : " << srUspeh/K << endl; } else if(choice == 2) { int FKNomer=0; bool isFound=false; double srUspeh=0; cout << "FK Nomer: "; cin >> FKNomer; for(int i=0; i<K; ++i) { if(GR[i][0] == FKNomer) { for(int j=1; j<5; ++j) srUspeh += GR[i][j]; isFound = true; break; } } if(isFound == false) cout << "Ne e nameren student s takiv FK nomer!" << endl; else if(isFound) cout << "Sredniq uspeh na student s FK=" << FKNomer << " e : " << srUspeh/4 << endl; } else if(choice == 3) { int vizrast, br=0; cout << "Vivedete vizrast: "; cin >> vizrast; for(int i=0; i<K; ++i) { if(GR[i][5] > vizrast) { br++; } } cout << "Broq na studentite, koito sa po-golemi ot " <<vizrast << " godini: " << br << endl; } else if(choice == 4) { for(int i=0; i<K; ++i) { cout << "Student " << i+1 << endl; cout << "Fak. Nomer: " << GR[i][0] << endl; cout << "Otsenki: " << GR[i][1] << " " << GR[i][2] <<" "<< GR[i][3] <<" "<<GR[i][4] << endl; cout << "Vizrast: " << GR[i][5] << endl; } } return 0; } Не мисля че това е целта на задачата, така че едва ли ще бъде приета за вярна. 
    • от Yehet
      В какво се различават структурите от класовете в С++?
  • Разглеждащи в момента   0 потребители

    Няма регистрирани потребители разглеждащи тази страница.

  • Дарение

×

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите условия за ползване.