1樓:靜心先生
三個都是引用
ostream屬於io流物件,無法被拷貝或移動,只能引用。
const derived是一個物件,拷貝或移動過於耗資源,所以用引用
2樓:匿名使用者
這個是引用
c++是c語言的繼承,它可進行過程化程式設計,又可以進行以抽象資料型別為特點的基於物件的程式設計,還可以進行以繼承和多型為特點的物件導向的程式設計。引用(reference)就是c++對c語言的重要擴充。引用就是某一變數(目標)的一個別名,對引用的操作與對變數直接操作完全一樣。
引用的宣告方法:型別識別符號 &引用名=目標變數名;
引用說明
(1)&在此不是求地址運算,而是起標識作用。
(2)型別識別符號是指目標變數的型別。
(3)宣告引用時,必須同時對其進行初始化。
(4)引用宣告完畢後,相當於目標變數名有兩個名稱,即該目標原名稱和引用名,且不能再把該引用名作為其他變數名的別名。
int a=2,&ra=a;
a為目標原名稱,ra為目標引用名。給ra賦值:ra=1; 等價於 a=1;
(5)對引用求地址,就是對目標變數求地址。&ra與&a相等。即我們常說引用名是目標變數名的一個別名。
別名一詞好像是說引用不佔據任何記憶體空間。但是編譯器在一般將其實現為const指標,即指向位置不可變的指標。即引用實際上與一般指標同樣佔用記憶體。
(6)不能建立引用的陣列。因為陣列是一個由若干個元素所組成的集合,所以無法建立一個由引用組成的集合。但是可以建立陣列的引用.
把引用作為引數 c++ 支援把引用作為引數傳給函式,這比傳一般的引數更安全。
把引用作為返回值 可以從 c++ 函式中返回引用,就像返回其他資料型別一樣。
求解 c++中三種繼承方式的區別!
3樓:匿名使用者
public公有繼承
protected保護繼承
private私有繼承
我們知道類
的private和protected成員,在類外是不可以使用的.只有public成員可以在類外直接使用.
公有繼承時,基類的private成員派生類也不可用,基類的public和protected成員在派生類中可直接使用.繼承過來(變成派生類相應的public和protected成員)只有public成員在派生類外可以直接使用.
保護繼承時,基類的private成員仍為有私有.基類的public和protected成員變成派生類的protected成員,這時在派生類外也不能直接使用原基類的public成員
私有繼承時,基類的private成員仍為有私有.基類的public和protected成員將變成派生類的private成員.
舉個例子.
class a
;class b:public a
void setage(int nage)
void setmoney(int nmoney)
};b objb;//建立b類的物件objb
objb.m_ntelnum=123456;//可以
objb.m_nage=30;//錯誤.public繼承中基類的protected在派生類中是protected
objb.m_nmoney=100;//更錯誤,在派生類中都不可以直接使用.在類外就更不能了.
class c:protected a
void setage(int nage)
void setmoney(int nmoney)
};c objc;//建立c類的物件objc
objc.m_ntelnum=123456;//注意這裡和public的區別,這裡錯誤,m_ntelnum變成了c類的protected成員
objc.m_nage=30;//錯誤.protected繼承中基類的protected在派生類中是protected,這與public同相
objc.m_nmoney=100;//更錯誤,在派生類中都不可以直接使用.在類外就更不能了.
class d:private a
void setage(int nage)
void setmoney(int nmoney)
};d objd;//建立d類的物件objd
objd.m_ntelnum=123456;//錯誤,m_ntelnum變成了d類的private成員
objd.m_nage=30;//錯誤.private繼承中基類的protected在派生類中是private
objd.m_nmoney=100;//更錯誤,在派生類中都不可以直接使用.在類外就更不能了.
從例子來看,三種繼承從派生類內部引用來看好像沒有區別,只在類外引用時表現不同.現在還看不出public和protected繼承的區別
那再看一個例子.
class e:public b
void setage(int nage)
void setmoney(int nmoney)
};e obje;//
obje.m_ntelnum=123456;//可以
//其它的兩個就不能用了.
class f:public c
void setage(int nage)
void setmoney(int nmoney)
};f objf;
objf.m_ntel=123456;//錯誤,因為這是f的保護成員.注意與e類區別
class g:public d
void setage(int nage)
void setmoney(int nmoney)
};//那g在類外就沒有了可以引用的繼承過來成員了!
//這些繼承方式是很難理解的.最好的辦法就是多寫**去試.
4樓:二天有
公用(public):訪問許可權最高;除派生類外,外部函式也可以直接訪問(無論是成員變數還是成員函式)。
私有(private):訪問許可權最低;只能是該類內部函式互相呼叫,派生類、外部函式都不能訪問。
保護(protect):訪問許可權中間;該類內部函式、派生類都能訪問,外部類、外部函式不能訪問
我們這樣來記會更加容易一些,在繼承時:
1、不管採用哪種形式(public, protected或private),基類中的私有成員都不可以被繼承;如果非要在派生類中使用基類的私有成員,可以有兩種方法:一是使用屬性,二是使用友元類或友元函式。
2、如果採用public形式,則基類除了私有成員的其它所有都被原樣的繼承到派生類中;即在基類中是public的,在派生類中還是public的,在基類中是protected的,在派生類中還是protected的。
3、如果採用protected形式,則基類中除了私有成員的其它說有都被以protected的形式繼承到派生類中。
c++中的繼承方式有:
public、private、protected三種(它們直接影響到派生類的成員、及其物件對基類成員訪問的規則)。
(1)public(公有繼承):繼承時保持基類中各成員屬性不變,並且基類中private成員被隱藏。派生類的成員只能訪問基類中的public/protected成員,而不能訪問private成員;派生類的物件只能訪問基類中的public成員。
(2)private(私有繼承):繼承時基類中各成員屬性均變為private,並且基類中private成員被隱藏。派生類的成員也只能訪問基類中的public/protected成員,而不能訪問private成員;派生類的物件不能訪問基類中的任何的成員。
(3)protected(保護性繼承):繼承時基類中各成員屬性均變為protected,並且基類中private成員被隱藏。派生類的成員只能訪問基類中的public/protected成員,而不能訪問private成員;派生類的物件不能訪問基類中的任何的成員。
c 類的虛繼承到底從父類那繼承了什麼
虛繼承不管父類派生出多少個子類在記憶體總只存在一套資料,但是一般繼承會存在與派生類個數對應的n個資料 n為派生類個數 c 中的類繼承究竟有什麼作用?繼承能體現事物的普遍性和特殊性。這是c 物件導向程式設計的一個重要概念,繼承可以使 得到重用,子類還可以在父類的基礎上新增功能。對於通明函式,如果不是虛...
求解c中三種繼承方式的區別
public公有繼承 protected保護繼承 private私有繼承 我們知道類 的private和protected成員,在類外是不可以使用的.只有public成員可以在類外直接使用.公有繼承時,基類的private成員派生類也不可用,基類的public和protected成員在派生類中可直接...
C 中類的繼承和類的組合之間有什麼共同點,區別是什麼?非常
繼承和組合都允許由已存在的型別建立新型別,兩者都是在新型別中嵌入已存在的型別的 子物件。區別是組合只實現了用一個也有的型別建立一個新的型別,而繼承不僅可以建立一個新的型別,還可以使用原來型別的介面。組合和繼承的共同點 繼承和組合的使用都可以減少重複 同時若類b是類a的內嵌物件,則b類具有a類的全部資...