以下是將 class 的data member 基本上給外部用的,用 const
如果是 讀取,當然沒問題,
但是如果是設定新值, 就必需要用 set member function, 或 set template
如果 data member 繁多, 就用 set template 吧, 省得寫一大堆沒營養的 fuction.
這樣作的好處是 trace code 的時候, 可以很容易的找到 set value 的地方.
當然如果不這麼作,用眼看,也是分析的出來. 但是
讀取通常有數十個到數百個 reference, 設定通常是數個.
要在數百個中找到數個,也是很累人的.
------------------------------------
#include <iostream>
#include <wtypes.h>
using namespace std;
void Output(const char* szFormat, ...)
{
char szBuff[1024];
va_list arg;
va_start(arg, szFormat);
_vsnprintf(szBuff, sizeof(szBuff), szFormat, arg);
va_end(arg);
OutputDebugString(szBuff);
}
template <class T>
T & set(const T& vin) {
return (T&) vin;
}
class cOne {
public:
const int v;
// int v;
cOne() : v(0)
{}
void dump()
{
Output("cOne'v = %d\n",v);
}
};
void func_modify(int & var)
{
var++;
}
void set_test()
{
cOne c1;
c1.dump();
// c1.v = 7; // error
int v1 = c1.v;
// int &v2 = c1.v; // error
int &v3 = set(c1.v);
v3=4;
c1.dump();
set(c1.v) = 6; c1.dump();
// func_modify(c1.v); // error
func_modify(set(c1.v)); c1.dump();
cOne *pc1 = new cOne;
// pc1->v = 10; // error
// int& v4 = pc1->v; // error
int& v5 = set(pc1->v);
v5=11;
pc1->dump();
set(pc1->v) = 12; pc1->dump();
// func_modify(pc1->v); // error
func_modify(set(pc1->v)); pc1->dump();
delete pc1;
}
int main()
{
cout << "Hi set_test" << endl;
set_test();
// getchar();
}
--------------------
----- Output -----
cOne'v = 0
cOne'v = 4
cOne'v = 6
cOne'v = 7
cOne'v = 11
cOne'v = 12
cOne'v = 13
訂閱:
張貼留言 (Atom)
ubuntu kernel 5.4 pop noise (躁音) // 用 這條命令 可 暫時 關閉音效 省電模式, 但 重開機, 問題 仍在. $ sudo echo 0 > /sys/module/snd_hda_intel/parameters/power_s...
-
反同的意見大集結: 1. 應該保障,但是不能說同志婚的主張優於異性婚. 因為民主是算人頭的.需要溝通立法. 必需要消除異性婚的疑慮. 2. 立法院/政府應該推出認識同志的官方資料 並由學者專家認可.立法委員簽名認可. 簡單版/詳盡版. 不宜由同志組...
-
婚姻的意義 婚姻最大的目的是 鼓勵生養 . 對於國家而言,婚姻產生新的公民. 對於家族而言,婚姻延續家族的香火. 對於個人而言,婚姻有生兒育女的可能性. 對於社會而言,婚姻最能穩定家族的結構,(血親制度)確認彼此的關係. 而且在這種婚姻制度裏,個人是要有所犠牲,有所...
-
從愛的三角形,論 同性婚/異性婚 的優劣. 以下,單身是點,二人是線,親子是面(三角形). (絆的多少,對應到關係的穩定度, 愛,血親,收養,長相伴(習慣),性愛, 都可以形成不同程度的"絆". 若同性婚/ 異性婚無明顯差異,則不特別標明....
沒有留言:
張貼留言