155178 Temat założony przez niniejszego użytkownika |
C++ taka sama nazwa atrybutu co metody w klasie » 2017-12-31 02:46:15 Witam. Posiadam w programie klasę DodatkoweWyposazenie, a jej kod wygląda tak : DodatkoweWyposazenie.h : #pragma once #include<string> #include<iostream>
using namespace std; class DodatkoweWyposazenie { protected: string nazwa; public: void getnazwa(); DodatkoweWyposazenie( string nazwa ); ~DodatkoweWyposazenie(); };
DodatkoweWyposazenie.cpp : #include "DodatkoweWyposazenie.h"
DodatkoweWyposazenie::DodatkoweWyposazenie( string nazwa ) { this->nazwa = nazwa; }
DodatkoweWyposazenie::~DodatkoweWyposazenie() { }
void DodatkoweWyposazenie::getnazwa() { cout << endl << nazwa; } W taki sposób wszystko w programie działa, ale jeżeli chciałbym zamienić nazwę metody w pliku .h void getnazwa(); na void nazwa(); i analogicznie w pliku .cpp nazwę metody void DodatkoweWyposazenie::getnazwa() { cout << endl << nazwa; } na void DodatkoweWyposazenie::nazwa() { cout << endl << nazwa; } to kompilator wyrzuca mi błąd, że "identyfikator przesłonięcia jest niewłaściwy". W jaki sposób zmienić te nazwy? Robię zadanie zgodnie z diagramem UML i powinienem posiadać atrybut string nazwa oraz metodę void nazwa();, ale kompilator wyrzuca powyższy błąd. |
|
pekfos |
» 2017-12-31 03:05:26 Nie da się w C++ mieć tej samej nazwy dla metody i pola w klasie. Z tych dwóch, prędzej pole będzie niewidoczne z zewnątrz, więc to jemu powinieneś nadać inną nazwę. Np m_nazwa, nazwa_, czy coś takiego. |
|
155178 Temat założony przez niniejszego użytkownika |
» 2017-12-31 12:12:20 Czyli krótko mówiąc nie da się zrobić klasy w pełni zgodnej z diagramem UML? https://imgur.com/9CuSNbV Tutaj podgląd schematu klasy. Po prostu rozwiązaniem jest zmiana nazwy atrybutu, aby się nie gryzła z nazwą metody, dobrze zrozumiałem? |
|
DejaVu |
» 2017-12-31 14:11:42 Nie powinieneś mieć dwóch takich samych nazw, które mają inne znaczenie. W Twoim wypadku: auto v1 = obiekt.nazwa(); auto v2 = obiekt.nazwa;
Jeżeli tworzysz nieprawidłowy diagram UML to nie oczekuj, że język programowania to zaakceptuje. |
|
155178 Temat założony przez niniejszego użytkownika |
» 2017-12-31 14:28:20 Nie ja stworzyłem ten diagram UML. Dostałem za zadanie zaimplementować klasy według diagramu. Zadanie na uczelnię :) Dziękuję za rozwianie moich wątpliwości, dam po prostu inną nazwę metody. A już korzystając z okazji mógłby mi ktoś pomóc z ułożeniem komentowanego klasyfikatora? Tzn. jak wyglądałaby postać konstruktora DodatkoweWyposazenie( DodatkoweWyposazenie wyp ); w pliku .cpp? To będzie coś typu przypisanie new DodatkoweWyposazenie = wyp? Nigdy nie budowałem takich konstruktorów na podstawie zmiennej typu klasa i nie wiem jak się za to zabrać. Visual wyrzuca mi błąd przy samej deklaracji konstruktora DodatkoweWyposazenie( DodatkoweWyposazenie wyp ); "niedozwolony konstruktor kopiujący : pierwszy parametr nie może być "DodatkoweWyposazenie". Czy da się w takim razie zadeklarować i utworzyć w jakiś sposób konstruktor zgodnie z otrzymanym diagramem UML? Chodzi o ostatnią linijkę na wrzuconym przeze mnie diagramie. Z góry dziękuję. |
|
DejaVu |
» 2017-12-31 14:41:15 DodatkoweWyposazenie( const DodatkoweWyposazenie & wyp );
|
|
155178 Temat założony przez niniejszego użytkownika |
» 2017-12-31 14:44:30 Czyli przekazujemy oryginał klasy na której pracujemy, dobrze rozumiem? I czy bez const nie miałoby to racji bytu? Jak powinno to wyglądać w pliku .cpp? Przepraszam, że może głupie pytania zadaję, ale ciężko jest znaleźć informacje oparte na konkretnych pytaniach, samą ideę konstruktorów rozumiem, jedynie w tym przypadku nie jestem przekonany jak dokładnie to powinno wyglądać.
Najbardziej interesuje mnie co możemy zrobić ze stałą "wyp" w konstruktorze. |
|
YooSy |
» 2017-12-31 15:56:13 To jest copy ctor więc jedno co powinno się zrobić w tym ctorze, to przepisać kropka kropkę zawartość wyp do *this. Nic ponad to, bo byłoby to zmienianie intencji tego ctora.
Stała referencja nie wymusza użycia copy ctora, jak w przypadku argumentu przez wartość, a const nie ogranicza przekazywanych argumentów do niestałych. |
|
« 1 » 2 |