本篇內(nèi)容主要講解“C++為什么只有直接訪問表達(dá)的函數(shù)才成為成員”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“C++為什么只有直接訪問表達(dá)的函數(shù)才成為成員”吧!
10年積累的成都做網(wǎng)站、成都網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站策劃后付款的網(wǎng)站建設(shè)流程,更有蒼溪免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
C.4:只有直接訪問表達(dá)的函數(shù),才應(yīng)該成為成員。
Reason(原因)
和使用成員函數(shù)相比普通函數(shù)耦合性略低,一方面可以通過修改對(duì)象狀態(tài)帶來麻煩的函數(shù)會(huì)變少,另一方面可以減少改變類表達(dá)時(shí)需要修改的函數(shù)的數(shù)量。
Example(示例)
class Date {
// ... relatively small interface ...
};
// helper functions:
Date next_weekday(Date);
bool operator==(Date, Date);
The "helper functions" have no need for direct access to the representation of a Date
.
“幫助函數(shù)”沒有需求要直接訪問Data的表達(dá)。
Note(注意)
This rule becomes even better if C++ gets "uniform function call".
如果C++可以導(dǎo)入“統(tǒng)一函數(shù)調(diào)用”這條準(zhǔn)則甚至?xí)兊酶昝馈?/p>
譯者注:“uniform funcation call”是C++之父本人提出的C++語法建議。核心是對(duì)于一個(gè)形如f(x,y)的函數(shù)調(diào)用,如果不存在函數(shù)f(x,y),可以轉(zhuǎn)而調(diào)用x.f(y)。有了這個(gè)語法,編寫非成員幫助函數(shù)的靈活性將會(huì)進(jìn)一步加大。
Exception(例外)
(C++)語言要求虛函數(shù)必須是成員,而且不是所有的虛函數(shù)都會(huì)直接訪問數(shù)據(jù)。通常抽象類的成員很少直接訪問數(shù)據(jù)。
Note multi-methods.
Exception(類外)
The language requires operators =
, ()
, []
, and ->
to be members.
語言要求=,(),[]和->運(yùn)算符作為成員存在。
Exception(列外)
An overload set may have some members that do not directly access private
data:
一組重載函數(shù)中也許會(huì)有某個(gè)成員不會(huì)直接訪問私有數(shù)據(jù)。
class Foobar {public: void foo(long x) { /* manipulate private data */ } void foo(double x) { foo(std::lround(x)); } // ...private: // ...};
Exception(例外)
Similarly, a set of functions may be designed to be used in a chain:
類似地,一組函數(shù)可能被設(shè)計(jì)用來串聯(lián)使用。
x.scale(0.5).rotate(45).set_color(Color::red);
Typically, some but not all of such functions directly access private
data.
通常,有些但不是所有這樣的函數(shù)都會(huì)直接訪問私有數(shù)據(jù)
Enforcement(實(shí)施建議)
Look for non-virtual
member functions that do not touch data members directly. The snag is that many member functions that do not need to touch data members directly do.
尋找沒有直接接觸數(shù)據(jù)成員的非虛成員函數(shù)。諷刺的是存在許多不需要直 接訪問數(shù)據(jù)成員的成員函數(shù)。
Ignore virtual
functions.
忽略虛函數(shù)。
Ignore functions that are part of an overload set out of which at least one function accesses private
members.
如果一組重載函數(shù)中至少有一個(gè)函數(shù)訪問了私有成員,那么忽略其他函數(shù)。
Ignore functions returning this
.
忽略返回this指針的函數(shù)。
到此,相信大家對(duì)“C++為什么只有直接訪問表達(dá)的函數(shù)才成為成員”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!