Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Konstruktoreiden Delegointi | Konstruktorit ja Destruktorit
C++ OOP

book
Konstruktoreiden Delegointi

Rakentajan delegointi (tunnetaan myös nimillä rakentajaketjutus tai eteenpäin ohjaaminen) mahdollistaa sen, että yksi rakentaja kutsuu toista saman luokan sisällä uudelleenkäyttääkseen yhteistä alustamislogiikkaa.

Rakentajan delegoinnin syntaksi

Rakentajan delegointia käytetään yleensä alustamislistan syntaksissa. Siinä käytetään kaksoispistettä (:) ja sen jälkeen kutsuttavaa rakentajaa sekä mahdollisia lisäargumentteja tai -parametreja, jotka täytyy välittää.

user_account.h

user_account.h

copy
class UserAccount {
public:
// Primary constructor
UserAccount(int userId, int accessLevel)
: userId(userId), accessLevel(accessLevel)
{
// Constructor body
}

// Delegating constructor (default accessLevel)
UserAccount(int userId) : UserAccount(userId, 0) {
// Constructor body
}

int userId;
int accessLevel;
};
1234567891011121314151617
class UserAccount { public: // Primary constructor UserAccount(int userId, int accessLevel) : userId(userId), accessLevel(accessLevel) { // Constructor body } // Delegating constructor (default accessLevel) UserAccount(int userId) : UserAccount(userId, 0) { // Constructor body } int userId; int accessLevel; };

Alustelulistojen käyttäminen konstruktorin delegoinnissa ei ole pakollista, mutta sitä suositellaan yleensä selkeyden ja suorituskyvyn vuoksi. Tarvittaessa voit kutsua ylikuormitettua konstruktoria toisesta konstruktorista.

point.h

point.h

copy
#include <iostream>

class Point {
public:
// Delegating constructor to initialize default point at origin
Point() {
Point(0, 0);
}

// Main constructor
Point(int x, int y)
: x(x), y(y) {}

int x, y;
};
123456789101112131415
#include <iostream> class Point { public: // Delegating constructor to initialize default point at origin Point() { Point(0, 0); } // Main constructor Point(int x, int y) : x(x), y(y) {} int x, y; };
Note
Huomio

Mahdollinen ääretön rekursio voi ilmetä käytettäessä konstruktorin delegointia. Varmista, että konstruktorit on rakennettu siten, että rekursiivisia kutsusilmukoita ei synny.

Konstruktoreiden delegointi tarjoaa useita etuja olio-ohjelmoinnissa ja on kätevä käyttää, huolimatta mahdollisesta alkuperäisestä monimutkaisuudesta.

question mark

Mitä tarkoittaa konstruktoreiden delegointi?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 5

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

We use cookies to make your experience better!
some-alt