最近在想如何在節省記憶體的情況下(不做多餘的copy所以多用reference)
使用物件導向,不過不是很懂。
所以舉一個例子想請各位先進指導。
假設有這幾個class :
#include <iostream>
#include <iomanip>
#include <string>
#include <vector>
using namespace std;
class A {
public :
A(int a0, double a1) : A_i(a0), A_d(a1){} // 建構子
private :
int A_i;
double A_d;
};
class B {
public :
// 建構子
B(int b0, double b1, int b2, double b3) : B_A(b0, b1), B_i(b2), B_d(b3) { }
B(const B &) = delete; // 不准copy
private :
A B_A ;
int B_i ;
double B_d;
};
class C {
public :
// 建構子
C(int c0, double c1, B c2) : C_i(c0), C_d(c1), C_B(c2) {
cout << "class C created!" << endl;
}
C(const C &) = delete; // 不准copy
~C(){
cout << "class C deconstructed!" << endl; // 解構子
}
int getXX() const{ return C_i; } ; // 假設getXX, getYY和getZZ都是有用的函式
bool getYY(C &c)const {return C_i>0;};
double getZZ() const {return C_d;}
_
private :
int C_i ;
double C_d;
B C_B;
};
================ 我是問題分隔線-1 ==================
問題1 :
關於class C :
如果我不希望在C物件中重新建立一個B物件,而是能夠連接到一個已經存在的B 物件
那我是不是要把B C_B ; 這行改成 B &C_B ?
然後建構子的話改成C(int c0, double c1, B &c2) : C_i(c0), C_d(c1), C_B(c2) ?
================ 我是問題分隔線-1 ==================
然後如果我創造一個物件D,其元件為class C的指標vector
(因為我不希望重新在D裏面建立物件C,只希望連到已有的物件C)
依照我測試的結果好像是這樣:
class D {
public :
void add_course(const C &c){ // 增加vector_c的元素
vector_C.push_back(&c);
}
const C *getC(size_t i) { // 讀取第i個 vector_C元素
return vector_C[i];
}
private :
vector <const C*> vector_C;
};
================ 我是問題分隔線-2&3 ==================
問題2 :
關於class D :
const C *getC(int i) 跟 const C &getC(int i) 到底有啥不同?
問題3 :
當我在解構 class D的時候會把 vector_C指向的 物件C們都解構掉嗎?
================ 我是問題分隔線-2&3 ==================
如果這時再建一個class E :
class E {
public :
E(D &d) : E_D(d){} // 建構子
int compute(size_t i, size_t j) const{
return E_D.getC(i)->getXX() + E_D.getC(j)->getXX();
}
private :
const D &E_D;
};
================ 我是問題分隔線-4 ==================
問題4 :
關於int compute(size_t i, size_t j) const這邊我怎麼try都沒辦法
要怎麼在E裏面使用其物件E_D裏面的物件C裏面的function?
在都是public的情況下
================ 我是問題分隔線-4 ==================
希望各位先進能夠給予指教。
感謝。