日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++基础13-类和对象之继承1

發布時間:2025/3/15 c/c++ 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++基础13-类和对象之继承1 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C++可重用性(software reusability)是通過繼承(inheritance)這一機制來實現的。 如果沒有掌握繼承性,就沒有掌握類與對象的精華。

總結:

1、只要是父類中的private成員,不管是什么繼承方式,兒子都訪問不了,但它是存在在兒子之中
2、如果是公有(public)繼承, 兒子中的訪問控制權限保持不變。
3、如果是保護(protected)繼承, 兒子中父親中除了private成員,其余在兒子中都是protected
4、如果是私有(private)繼承, 兒子中的父親的除了private成員,其余在二中都是private成員。
5、查看能否調用的//三看原則: ?
?? ??? ??? ??? ??? ?(1) 看調用的成員變量是在類的內部還是類的外部
?? ??? ??? ??? ??? ?(2) 看兒子繼承方式,
?? ??? ??? ??? ??? ?(3) 當前變量在兒子中的變量在父親中的訪問控制權限
6、構造方法和析構方法不繼承

5.1 類和類之間的關系

has-Auses-A is-A

has-A 包含關系,用以描述一個類由多個“部件類”構成。實現has-A關系用類成員表示,即一個類中的數據成員是另一種已經定義的類

uses-A 一個類部分地使用另一個類。通過類之間成員函數的相互聯系,定義友員或對象參數傳遞實現

is-A 機制稱為“繼承”。關系具有傳遞性,不具有對稱性。

5.2繼承

類的繼承,是新的類從已有類那里得到已有的特性。或從已有類產生新類 的過程就是類的派生。原有的類稱為基類或父類,產生的新類稱為派生類或子類。

派生類的組成:

派生類中的成員,包含兩大部分,一類是從基類繼承過來的,一類是自己增加的成員。從基類繼承過過來的表現其共性,而新增的成員體現了其個性。

幾點說明:

1,全盤接收,除了構造器與析構器。基類有可能會造成派生類的成員冗余,所以說基類是需設計的。

2,派生類有了自己的個性,使派生類有了意義。

5.3、 繼承的?式

5.3.1 語法

class 派?類名:[繼承?式] 基類名 {

派?類成員聲明;

};

一個派生類可以同時有多個基類,這種情況稱為多重繼承,派生類只有一個基類, 稱為單繼承。

protected 對于外界訪問屬性來說,等同于私有,但可以派生類中可見

public繼承:

當類的繼承方式為公有繼承時,基類的公有和保護成員的訪問屬性在派生類中不變,而基類的私有成員不可訪問即基類的公有成員和保護成員被繼承到派生類 中仍作為派生類的公有成員和保護成員。派生類的其他成員可以直接訪問它們。無論派生類的成員還是派生類的對象都無法訪問基類的私有成員。

protected繼承:

保護繼承中,基類的公有成員和私有成員都以保護成員的身份出現在派生類 中,而基類的私有成員不可訪問派生類的其他成員可以直接訪問從基類繼承來的 公有和保護成員,但是類外部通過派生類的對象無法訪問它們,無論派生類的成員 還是派生類的對象,都無法訪問基類的私有成員。

private繼承:

當類的繼承方式為私有繼承時,基類中的公有成員和保護成員都以私有成員身份出現在派生類中,而基類的私有成員在派生類中不可訪問基類的公有 成員和保 護成員被繼承后作為派生類的私有成員,派生類的其他成員可以直接 訪問它們,但 是在類外部通過派生類的對象無法訪問。無論是派生類的成員還是通過派生類的對 象,都無法訪問從基類繼承的私有成員。通過多次私有繼承后,對于基類的成員都 會成為不可訪問。因此私有繼承比較少用。

private成員在子類中依然存在,但是卻無法訪問到。不論何種方式繼承基類,派生類都不能直接使用基類的私有成員 。

如何恰當使用public,protected,private繼承方式:

1、需要被外界訪問的成員直接設置為public

2、只能在當前類中訪問的成員設置為private

3、只能在當前類和子類中訪問的成員設置為protected(protected成員的訪問權限介于public和private之間。 )

1類和類之間的關系

#define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; class A { public:void func() {cout << "funcA" << endl;}int a; };//類B擁有類A的成員變量, B has A ,//類B 依賴于 類A 依賴度高 class B { public:void funcB() {}A a; }; //耦合度 高內聚 低耦合//類C 的成員方法 需要類A的形參, C use A,//類C 依賴于 類A class C { public:void funcC(A *a) {}void funcC2(){} };//D繼承與A 類D 如果是繼承類A 類 D is A 。//類D繼承與A 耦合度很高 class D :public A { public:void funcD() {cout << this->a << endl;}};class E :public D { }; int main(void) {return 0; }

2繼承的基本概念

#if 1 #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string>using namespace std;class Student { public:Student(){}Student(int id, string name){this->id = id;this->name = name;}void printS() {cout << "id = " << this->id << ", name = " << this->name << endl;}int id; private:string name; };//創建一個新的學生類,增加score、功能 class Student2 { public:Student2(int id, string name, int score){this->id = id;this->name = name;this->score = score;}void printS() {cout << "id = " << this->id << ", name = " << this->name << endl;cout << "score = " << this->score << endl;} private:int id;string name;//addint score; };//通過繼承創建一個新的學生類 class Student3 :public Student { public://Student3(int id, string name, int score) //{// this->id = id;// this->name = name; //無法訪問父類的私有成員// this->score = score;//}Student3(int id, string name, int score) :Student(id, name) //利用父類的構造方法進行初始化部分數據成員{this->score = score;}void printS() {Student::printS();cout << "score = " << this->score << endl;} private:int score; };int main(void) {Student3 s3(1, "zhang3", 80);s3.printS();return 0; } #endif

3繼承的方式

#if 1 #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <memory>using namespace std;//規則1, 只要是父類中的private成員,不管是什么繼承方式,兒子都訪問不了 //規則2, 如果是公有(public)繼承, 兒子中的訪問控制權限保持不變。 //規則3, 如果是保護(protected)繼承, 兒子中父親中除了private成員,其余在兒子中都是protected //規則4, 如果是私有(private)繼承, 兒子中的父親的除了private成員,其余在二中都是private成員。class Parent { public:int pub; //在類的內部 和 外部 都能訪問。 protected:int pro; //在類的內部可以訪問, 在類的外部不可以訪問 private:int pri; //在類的內部可以訪問, 在類的外部不可以訪問 };//公有繼承 class Child :public Parent { public:void func(){cout << pub << endl; //pub父類的public成員變量,在public繼承 類的 【內部 外部】可以訪問。 cout << pro << endl;//pro 是父類protected成員變量 在public繼承類的 【內部】可以訪問。外部訪問不了 //此時的pro在孫子能夠訪問,說此時pro不是private成員,而是protected成員//cout << pri << endl; //pri 是父類private成員變量 在public繼承類的 【內部,外部】[不]可以訪問。}};//孫子類 class SubChild : public Child {void sub_func(){cout << pro << endl;} };//保護繼承 class Child2 :protected Parent { public:void func2() {pub;//此時pub通過protected繼承 能夠在類的內部訪問。 //pub 在類的內部可以訪問, 類的外部訪問不了, 類的兒子可以訪問//pub 就是protected成員pro;//pro 根pub 是一樣的性質,pro也是protected成員//pri;} };class Sub_child2 :public Child2 { public:void sub_func2() {pub;pro;} };//私有繼承 class Child3 :private Parent { public:void func3(){pub;//pub 在類的內部可以訪問。在類的內部可以訪問,類的外部不能訪問。//pub 在兒子中訪問不了,說明pub在Child3中是 私有成員pro;//pro 根pub的性質是一樣, 也是私有成員。//pri;} };class Sub_Child3 :public Child3 { public:void sub_fun3(){//pub;//pro;} };//三看原則: //1 看調用的成員變量是在類的內部還是類的外部 //2 看兒子繼承方式, //3 當前變量在兒子中的變量在父親中的訪問控制權限int main(void) {Child c1;c1.func();c1.pub;//c1.pri;Child2 c2;//c2.pub;//c2.pro;Child3 c3;//c3.pub;//c3.pro;c1.pub;return 0; } #endif

4繼承方式的練習

#if 0 #include<iostream> using namespace std; class A { private:int a; protected:int b; public:int c;A(){a = 0;b = 0;c = 0;}void set(int a, int b, int c){this->a = a;this->b = b;this->c = c;} };class B : public A { public:void print(){//cout << "a = " << a; //a是父類的私有成員訪問不了cout << "b = " << b; //b 此時是保護成員,類的內部可以訪問cout << "c = " << c << endl; //c 此時是公有成員,類的內部可以訪問} };class C : protected A { public:void print(){//cout << "a = " << a; //a是父類的私有成員訪問不了cout << "b = " << b; //b 在子類中是protected權限,類的內部可以訪問。cout << "c = " << c << endl; //c 子類的protected成員,類的內部可以訪問。} };class D : private A { public:void print(){//cout << "a = " << a; //a是父類的私有成員訪問不了cout << "b = " << b << endl; //b 此時是private成員,類的內部可以訪問。cout << "c = " << c << endl; //c 此時是private成員,類的內部可以訪問。} };int main(void) {A aa;B bb;C cc;D dd;aa.c = 100; //c 是公有 ,類的外部可以訪問。bb.c = 100; //Bpublic 繼承與A ,保持權限不變,c 是公有, 類的外部可以訪問//cc.c = 100; //C protected 繼承與A, c 在此類中是protected成員,類的外部不能訪問。 //dd.c = 100; //D private 繼承與A, c在此類中private成員,類的外部不能訪問。aa.set(1, 2, 3); //set在父類中是公有權限,類外能訪問bb.set(10, 20, 30); //set是public繼承,在子類中是public權限,在類外能訪問//cc.set(40, 50, 60); //set是protected繼承,set在子類中是保護權限 類外不能否訪問//dd.set(70, 80, 90); //set是private繼承,set在子類中是私有權限 類外不能否訪問bb.print(); //print 是定義在B類 public成員函數,在類的外部可以訪問。cc.print(); //print 是定義在C類 public成員函數,在類的外部可以訪問。dd.print(); //print 是定義在D類 public成員函數,在類的外部可以訪問。return 0; } #endif

?

?

?

?

?

?

?

?

總結

以上是生活随笔為你收集整理的C++基础13-类和对象之继承1的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。