Премини към съдържанието
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).
         
      • от blodwenn
        Цяла седмица се опитвам да си завърша курсовата задача по програмиране. Последния срок е утре до 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 потребители

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

    • Дарение

    ×

    Информация

    Този сайт използва бисквитки (cookies), за най-доброто потребителско изживяване. С използването му, вие приемате нашите Условия за ползване.