Výchozí hodnota pro parametr třídu, kde hodnota je jiná třída

0

Otázka

Název může být trochu matoucí, ale v podstatě mám třídu 'Čtveřice', která má 2 parametry, první je další instance třídy Vector3 a druhý je plovák.

Vector3 trvá 3 plováky jako parametry a přiřadí je k x, y a z.

Chci nastavit výchozí parametry pro Čtveřice třídy, ale já jsem si nejste jisti, jak nastavit výchozí parametry třídy jako parametr.

Vector3

class Vector3 {
  public:
    float x, y, z;

    Vector3(float uX, float uY, float uZ) {
      this->x = uX;
      this->y = uY;
      this->z = uZ; 
    }
};

Čtveřice

class Quaternion {
  public:
    Vector3 axis;
    float scalar;

    Quaternion(Vector3 uAxis, float uScalar = 0) {
      axis = uAxis;
      scalar = uScalar;
    };
};

Chtěl bych mít výchozí parametr pro uAxis být Vector3 s x, y a z na 1, 0, 0 respektive, ale já jsem si nejste jisti, jak to udělat.

c++ class
2021-11-23 22:08:14
3

Nejlepší odpověď

2

Myslím, že tohle je to, co jste hledali:

class Quaternion {
  public:
    Vector3 axis;
    float scalar;

    Quaternion(Vector3 uAxis = Vector3(1.0, 0.0, 0.0), float uScalar = 0) {
      axis = uAxis;
      scalar = uScalar;
    };
};

Je možné volat konstruktor třídy nastavit výchozí parametr. Zde je odpovídající referenční cpp výchozí argumenty.

2021-11-23 22:12:28

páni, po shlédnutí řešení zdá tak zřejmé, lol, ty vole.
sorry.vol
2

To je to, co chcete. Vždy používejte inicializace seznamu v konstruktoru, pokud budete muset udělat něco s parametry docs. Také jsem kolem uAxis jako const odkaz, který je vždy dobrá věc pro ADT (Abstraktní Datové Typy), Pokud nemáte speciální požadavky.

 class Quaternion 
 {
    Vector3 axis;
    float scalar;

 public:
    Quaternion(const Vector3 & uAxis = Vector3(1.0, 0.0, 0.0), float uScalar = 0) :
      axis(uAxis),
      scalar(uScalar)
    {
    }
 };
2021-11-23 22:38:00
1

Další možností by bylo použít výchozí člen inicializace pro axis v rámci Quaternion. Tímto způsobem, jen vytváření Quaternion q{} by nastavit axis na cokoliv chcete. [Demo]

class Quaternion {
public:
    Vector3 axis{1.0, 0.0, 0.0};
    float scalar{};

    Quaternion() = default;
    ...
};

Pro Quaternion(Vector3 uAxis, float uScalar) konstruktor, bylo by vhodnější použít členské inicializátoru seznamu:

Quaternion(Vector3 uAxis, float uScalar) : axis{uAxis}, scalar{uScalar} {};

Také můžete odstranit Vector3je konstruktor, což Vector3 o agregát:

struct Vector3 {
    float x{};
    float y{};
    float z{};
};

Vector3 v{1.1, 2.2, 3.3};
2021-11-23 23:45:01

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................