[問題] 私有繼承 operator overloading

看板C_and_CPP (C/C++)作者 (JSL)時間13年前 (2013/04/05 12:58), 編輯推噓0(009)
留言9則, 2人參與, 最新討論串1/1
開發平台(Platform): Linux Kernel version 3.5 Ubuntu 12.10 64-bit g++ 4.7.2 問題(Question): 是這樣的,我實作了一個template稱為Vector3,其中有許多operator, 接著我做了一個class叫作Color去私有繼承Vector3<int>。 我的問題是derived class要怎麼去使用base class的operator會比較恰 當?目前我是想到以下這個方法,但總覺得怪怪的。 // vector3.h template <typename T> class Vector3 { public: ... Vector3 operator+(const Vector3 &vector) const; ... protected: T x_, y_, z_; }; // color.h class Color : private Vector3<int> { public: ... Color(const Vector3<int> &vector) : Vector3<int>(vector) {} Color operator+(const Color &color) const; ... }; // color.cpp Color Color::operator+(const Color &color) const { return Color( dynamic_cast<const Vector3<int> &>(color) + dynamic_cast<Vector3<int> &>(*this)); } 備註: 當然有人會說為什麼不直接宣告一個Vector3<int> color,這是因為我單純不想 要access function叫作x()、y()、z(),我可能太龜毛了XD -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.135.100.54

04/05 14:55, , 1F
這根本不用繼承啊 ... 你在走彎路
04/05 14:55, 1F

04/05 16:10, , 2F
用 using... 而且也不是用 dynamic_cast... 如果兩個
04/05 16:10, 2F

04/05 16:10, , 3F
類別操作根本幾乎一樣, 你應該考慮 typedef 而不是做
04/05 16:10, 3F

04/05 16:11, , 4F
重工, 自己的觀感是其次, 表達各類別的責任關係最重要
04/05 16:11, 4F

04/05 16:12, , 5F
不想要 accessor 叫 x()、y()、z() 不代表使用者就一
04/05 16:12, 5F

04/05 16:13, , 6F
定不能呼叫到他們, 可視範圍可以是 public 但是在做
04/05 16:13, 6F

04/05 16:14, , 7F
typedef 的時候定義出 Color 型別提供的操作, 所以使
04/05 16:14, 7F

04/05 16:14, , 8F
應該儘量使用這些抽象化出來的操作而不是 Vector3<T>
04/05 16:14, 8F

04/05 16:15, , 9F
成員, 使用者使用不當造成太相依於實作不是你的責任
04/05 16:15, 9F
文章代碼(AID): #1HNbdrJO (C_and_CPP)
文章代碼(AID): #1HNbdrJO (C_and_CPP)