日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁(yè) > php開(kāi)源 > php教程 > C++ Notes-Inheritance-02

C++ Notes-Inheritance-02

來(lái)源:程序員人生   發(fā)布時(shí)間:2016-11-19 14:50:18 閱讀次數(shù):2435次

繼承方式

1、繼承方式簡(jiǎn)介

1、不同的繼承方式的影響主要體現(xiàn)在:

(1)派生類(lèi)成員對(duì)其基類(lèi)成員的訪問(wèn)權(quán)限

(2)通過(guò)派生類(lèi)對(duì)象對(duì)基類(lèi)成員的訪問(wèn)權(quán)限

2、3種繼承方式

(1)公有繼承(public)

(2)私有繼承(private)

(3)保護(hù)繼承(protected)

2、公有繼承(public)

1、繼承的訪問(wèn)控制

(1)基類(lèi)的public和protected成員:訪問(wèn)屬性在派生類(lèi)中保持不變

(2)基類(lèi)的private成員:不可直接訪問(wèn)

2、訪問(wèn)權(quán)限

(1)派生類(lèi)中的成員函數(shù):可以直接訪問(wèn)基類(lèi)中的public和protected成員,但不能直接訪問(wèn)基類(lèi)的private成員

(2)通過(guò)派生類(lèi)的對(duì)象:只能訪問(wèn)public成員

3、Code

#include <iostream> #include <cmath> using namespace std; class Point { //基類(lèi)Point類(lèi)的定義 public: //公有函數(shù)成員 void initPoint(float x = 0, float y = 0) { this->x = x; this->y = y; } void move(float offX, float offY) { x += offX; y += offY; } float getX() const { return x; } float getY() const { return y; } private: //私有數(shù)據(jù)成員 float x, y; }; class Rectangle: public Point { //派生類(lèi)定義部份 public: //新增公有函數(shù)成員 void initRectangle(float x, float y, float w, float h) { initPoint(x, y); //調(diào)用基類(lèi)公有成員函數(shù) this->w = w; this->h = h; } float getH() const { return h; } float getW() const { return w; } private: //新增私有數(shù)據(jù)成員 float w, h; }; int main() { Rectangle rect; //定義Rectangle類(lèi)的對(duì)象 rect.initRectangle(2, 3, 20, 10); //設(shè)置矩形的數(shù)據(jù) rect.move(3,2); //移動(dòng)矩形位置 cout << "The data of rect(x,y,w,h): " << endl; //輸出矩形的特點(diǎn)參數(shù) cout << rect.getX() <<", "<< rect.getY() << ", "<< rect.getW() << ", "<< rect.getH() << endl; return 0; }

3、私有繼承(private)

1、繼承的訪問(wèn)控制

(1)基類(lèi)的public和protected成員:都以private的身份出現(xiàn)在派生類(lèi)中

(2)基類(lèi)的private成員:不可直接訪問(wèn)

2、訪問(wèn)權(quán)限

(1)派生類(lèi)中的成員函數(shù):可以直接訪問(wèn)基類(lèi)中的public和protected成員,但不能直接訪問(wèn)基類(lèi)的private成員

(2)通過(guò)派生類(lèi)的對(duì)象:不能直接訪問(wèn)從基類(lèi)繼承的任何成員

3、Code

值得注意的是,基類(lèi)中的move函數(shù)通過(guò)私有繼承到派生類(lèi)后,是不能在類(lèi)外使用的,如果要在類(lèi)外使用,可以在派生類(lèi)的public下重寫(xiě)1個(gè)move函數(shù),這樣在類(lèi)外就能夠調(diào)用了。

#include <iostream> #include <cmath> using namespace std; class Point { //基類(lèi)Point類(lèi)的定義 public: //公有函數(shù)成員 void initPoint(float x = 0, float y = 0) { this->x = x; this->y = y; } void move(float offX, float offY) { x += offX; y += offY; } float getX() const { return x; } float getY() const { return y; } private: //私有數(shù)據(jù)成員 float x, y; }; class Rectangle: private Point { //派生類(lèi)定義部份 public: //新增公有函數(shù)成員 void initRectangle(float x, float y, float w, float h) { initPoint(x, y); //調(diào)用基類(lèi)公有成員函數(shù) this->w = w; this->h = h; } void move(float offX, float offY) //雖然對(duì)象不能在類(lèi)外使用基類(lèi)的move函數(shù),但是在派生類(lèi)中可使用基類(lèi)的move函數(shù) { Point::move(offX, offY); } float getX() const { return Point::getX(); } float getY() const { return Point::getY(); } float getH() const { return h; } float getW() const { return w; } private: //新增私有數(shù)據(jù)成員 float w, h; }; int main() { Rectangle rect; //定義Rectangle類(lèi)的對(duì)象 rect.initRectangle(2, 3, 20, 10); //設(shè)置矩形的數(shù)據(jù) rect.move(3,2); //移動(dòng)矩形位置,要注意此時(shí)的move函數(shù)是派生類(lèi)Rectangle中的成員函數(shù) cout << "The data of rect(x,y,w,h): " << endl; //輸出矩形的特點(diǎn)參數(shù) cout << rect.getX() <<", "<< rect.getY() << ", "<< rect.getW() << ", "<< rect.getH() << endl; return 0; }

4、保護(hù)繼承(protected)

1、繼承的訪問(wèn)控制

(1)基類(lèi)的public和protected成員:都以protected的身份出現(xiàn)在派生類(lèi)中

(2)基類(lèi)的private成員:不可直接訪問(wèn)

2、訪問(wèn)權(quán)限

(1)派生類(lèi)中的成員函數(shù):可以直接訪問(wèn)基類(lèi)中的public和protected成員,但不能直接訪問(wèn)基類(lèi)的private成員

(2)通過(guò)派生類(lèi)的對(duì)象:不能直接訪問(wèn)從基類(lèi)繼承的任何成員

3、protected 成員的特點(diǎn)與作用

(1)對(duì)建立其所在類(lèi)對(duì)象的模塊來(lái)講,它與private成員的性質(zhì)相同

(2)對(duì)其派生類(lèi)來(lái)講,它與public性質(zhì)相同

(3)既實(shí)現(xiàn)了數(shù)據(jù)隱藏,又方便繼承,實(shí)現(xiàn)代碼重用

4、protected用處

如果代碼是同1組,同1個(gè)團(tuán)隊(duì)內(nèi)的人寫(xiě)的,那末我們可以繼承使用基類(lèi)protected的細(xì)節(jié)。但是如果不是同1組人寫(xiě)的,或是買(mǎi)的類(lèi)庫(kù),那末使用protected的細(xì)節(jié)就不是那末方便了。

5、Code

class A { protected: int x; }; int main() { A a; a.x = 5;//毛病 } class A { protected: int x; }; class B: public A{ public: void function(); }; void B:function() { x = 5; //正確 }


5、多繼承

如果派生類(lèi)有多個(gè)基類(lèi),也就是多繼承,可以用不同的方式繼承每一個(gè)基類(lèi)。

Code:

class A { public: void setA(int x){ a=x; } void showA() const{cout<<a<<endl;}; private: int a; }; class B { public: void setB(int x){ b=x; } void showB() const{cout<<b<<endl;}; private: int b; }; class C : public A, private B { public: void setC(int x, int y, int z) { //派生類(lèi)成員直接訪問(wèn)基類(lèi)的公有成員 setA(x); setB(y); c = z; } void showC() const{cout<<c<<endl;}; private: int c; }; int main() { C obj; obj.setA(5); obj.showA(); obj.setC(6,7,9); obj.showC(); // obj.setB(6); 毛病 // obj.showB(); 毛病 return 0; }






生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 91视频久久久 | 日本在线视频一区二区 | 999精品视频 | 国产日韩精品视频 | 首页 国产 欧美 日韩 丝袜 | 国产成人精品一区二 | 国产一区精品 | 国产成人精品一区二区在线 | 欧美日韩国产一区二区三区 | 色一色成人网 | 亚洲播播 | 精品不卡在线 | 一区二区精品视频 | 成人一级毛片 | 男女网站在线观看 | 免费观看不卡av | 台湾av在线 | 成年人黄网站 | 激情欧美一区二区三区中文字幕 | 国产在线不卡一区 | 亚洲成人av | 国产一区二区三区免费视频 | 精品久久9 | 俄罗斯精品一区二区三区 | 国产嫩草一区二区三区在线观看 | 操到喷水 | 亚洲精品日韩综合观看成人91 | 92久久 | 成人黄色电影网址 | 九九九国产 | 亚洲精品久久 | 永久免费精品视频 | 亚洲综合久久久久 | 久久精品一区二区三区四区 | 国产精品国产三级国产专播品爱网 | 精品免费| 999精品嫩草久久久久久99 | 最新黄网 | 亚洲一区二区三区四区五区午夜 | 最近免费观看电影大全在线观看 | 成人欧美一区二区三区黑人动态图 |