Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Udfordring: Konstruktør og Attributter | Konstruktører og Destruktører
C++ OOP

bookUdfordring: Konstruktør og Attributter

En af de primære anvendelser af konstruktører er at initialisere attributter for klassen. En standardkonstruktør kan for eksempel bruges til at sætte startværdier. For eksempel:

main.cpp

main.cpp

copy
1234567891011121314
#include <iostream> class Person { public: Person() { name = "undefined"; } std::string name; }; int main() { Person person; std::cout << person.name; }

Hvis du ikke angiver en værdi for name-attributten for objektet, vil den blive sat til underfined som standard. Du kan prøve at fjerne denne konstruktør for at se, hvilke ændringer der opstår.

Initialisering af attributter med konstruktør

Ligesom funktioner kan konstruktører tage parametre, hvilket muliggør forskellige argumenter under oprettelsen af objekter. Du kan også overbelaste dem for at håndtere varierende antal argumenter.

main.cpp

main.cpp

copy
123456789101112131415161718
class Person { public: Person(std::string _name, std::string _surname, int _age) { name = _name; surname = _surname; age = _age; } std::string name; std::string surname; int age; }; int main() { Person person("Bob", "Song", 23); }
Opgave

Swipe to start coding

Forestil dig, at du bygger et simpelt kortlægningssystem. Du skal oprette en Location-klasse, der repræsenterer et punkt på et kort med et navn og koordinater. Din opgave er at implementere en konstruktør og en metode til at beregne afstanden til en anden lokation.

  1. Implementer en konstruktør, der initialiserer alle tre felter:
    • Konstruktøren skal tage tre parametre: en std::string for navnet og to double-værdier for x- og y-koordinaterne.
    • Inde i konstruktøren skal parameteren for navnet tildeles objektets name-felt.
    • Parameteren for x-koordinaten skal tildeles objektets x-felt.
    • Parameteren for y-koordinaten skal tildeles objektets y-felt.
  2. Implementer en metode distanceTo, der tager et andet Location-objekt som parameter:
    • Tilgå x- og y-koordinaterne for både det aktuelle objekt og det andet objekt.
    • Beregn forskellen i x-koordinaterne: other.x - x.
    • Beregn forskellen i y-koordinaterne: other.y - y.
    • Udregn afstanden ved hjælp af formlen: sqrt(dx * dx + dy * dy).
    • Returnér den beregnede afstand som en double.

Eksempel

Location("Home", 0.0, 0.0) og Location("Office", 3.0, 4.0) -> 5.0
Location("Park", 1.0, 2.0) og Location("School", 4.0, 6.0) -> 5.0
Location("Cafe", -1.0, -1.0) og Location("Library", 2.0, 3.0) -> 5.0

Løsning

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 2. Kapitel 2
single

single

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

close

bookUdfordring: Konstruktør og Attributter

Stryg for at vise menuen

En af de primære anvendelser af konstruktører er at initialisere attributter for klassen. En standardkonstruktør kan for eksempel bruges til at sætte startværdier. For eksempel:

main.cpp

main.cpp

copy
1234567891011121314
#include <iostream> class Person { public: Person() { name = "undefined"; } std::string name; }; int main() { Person person; std::cout << person.name; }

Hvis du ikke angiver en værdi for name-attributten for objektet, vil den blive sat til underfined som standard. Du kan prøve at fjerne denne konstruktør for at se, hvilke ændringer der opstår.

Initialisering af attributter med konstruktør

Ligesom funktioner kan konstruktører tage parametre, hvilket muliggør forskellige argumenter under oprettelsen af objekter. Du kan også overbelaste dem for at håndtere varierende antal argumenter.

main.cpp

main.cpp

copy
123456789101112131415161718
class Person { public: Person(std::string _name, std::string _surname, int _age) { name = _name; surname = _surname; age = _age; } std::string name; std::string surname; int age; }; int main() { Person person("Bob", "Song", 23); }
Opgave

Swipe to start coding

Forestil dig, at du bygger et simpelt kortlægningssystem. Du skal oprette en Location-klasse, der repræsenterer et punkt på et kort med et navn og koordinater. Din opgave er at implementere en konstruktør og en metode til at beregne afstanden til en anden lokation.

  1. Implementer en konstruktør, der initialiserer alle tre felter:
    • Konstruktøren skal tage tre parametre: en std::string for navnet og to double-værdier for x- og y-koordinaterne.
    • Inde i konstruktøren skal parameteren for navnet tildeles objektets name-felt.
    • Parameteren for x-koordinaten skal tildeles objektets x-felt.
    • Parameteren for y-koordinaten skal tildeles objektets y-felt.
  2. Implementer en metode distanceTo, der tager et andet Location-objekt som parameter:
    • Tilgå x- og y-koordinaterne for både det aktuelle objekt og det andet objekt.
    • Beregn forskellen i x-koordinaterne: other.x - x.
    • Beregn forskellen i y-koordinaterne: other.y - y.
    • Udregn afstanden ved hjælp af formlen: sqrt(dx * dx + dy * dy).
    • Returnér den beregnede afstand som en double.

Eksempel

Location("Home", 0.0, 0.0) og Location("Office", 3.0, 4.0) -> 5.0
Location("Park", 1.0, 2.0) og Location("School", 4.0, 6.0) -> 5.0
Location("Cafe", -1.0, -1.0) og Location("Library", 2.0, 3.0) -> 5.0

Løsning

Switch to desktopSkift til skrivebord for at øve i den virkelige verdenFortsæt der, hvor du er, med en af nedenstående muligheder
Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 2. Kapitel 2
single

single

some-alt