標題可能有點混亂,但基本上我有一個“四元數”類,它有 2 個引數,第一個是 Vector3 類的另一個實體,另一個是浮點數。
Vector3 將 3 個浮點數作為引數并將它們分配給 x、y 和 z。
我想為 Quaternion 類設定默認引數,但我不確定如何使用類作為引數設定默認引數。
矢量3
class Vector3 {
public:
float x, y, z;
Vector3(float uX, float uY, float uZ) {
this->x = uX;
this->y = uY;
this->z = uZ;
}
};
四元數
class Quaternion {
public:
Vector3 axis;
float scalar;
Quaternion(Vector3 uAxis, float uScalar = 0) {
axis = uAxis;
scalar = uScalar;
};
};
我希望將x、y 和 z分別設定為uAxisa的默認引數,但我不確定如何執行此操作。Vector31, 0, 0
uj5u.com熱心網友回復:
我想這就是你要找的:
class Quaternion {
public:
Vector3 axis;
float scalar;
Quaternion(Vector3 uAxis = Vector3(1.0, 0.0, 0.0), float uScalar = 0) {
axis = uAxis;
scalar = uScalar;
};
};
可以呼叫類的建構式來設定默認引數。這是相應的 cpp 參考默認引數。
uj5u.com熱心網友回復:
這就是你想要的。除非你必須對引數docs做一些事情,否則總是在建構式上使用初始化串列。此外,我正在傳遞uAxisas const 參考,這對于 ADT(抽象資料型別)來說總是一件好事,除非您有特殊要求。
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)
{
}
};
uj5u.com熱心網友回復:
另一種選擇是使用默認成員初始化的axis范圍內Quaternion。這樣,只需創建一個Quaternion q{}將設定axis為您想要的任何內容。[演示]
class Quaternion {
public:
Vector3 axis{1.0, 0.0, 0.0};
float scalar{};
Quaternion() = default;
...
};
對于Quaternion(Vector3 uAxis, float uScalar)建構式,最好使用成員初始值設定項串列:
Quaternion(Vector3 uAxis, float uScalar) : axis{uAxis}, scalar{uScalar} {};
此外,你可以洗掉Vector3的構造,使得 Vector3一個總:
struct Vector3 {
float x{};
float y{};
float z{};
};
Vector3 v{1.1, 2.2, 3.3};
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/364455.html
