最近在想如何在节省内存的情况下(不做多余的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 ==================
希望各位先进能够给予指教。
感谢。