一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C/C++之面向?qū)ο缶幊趟枷?

jf_78858299 ? 來(lái)源:小余的自習(xí)室 ? 作者:小余的自習(xí)室 ? 2023-03-30 15:14 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

C++作為一門在C和Java之間的語(yǔ)言,其既可以使用C語(yǔ)言中的高效指針,又繼承了Java中的面向?qū)ο?a target="_blank">編程思想,在去年編程語(yǔ)言排行榜上更是首次超過(guò)Java,進(jìn)入前三。

今天這篇文章就來(lái)講解下C++中的 面向?qū)ο缶幊趟枷?/strong> 。說(shuō)到面向?qū)ο缶幊蹋鸵v到對(duì)象的三大特性: 封裝,繼承和多態(tài) 。本篇文章就以這三個(gè)特性展開(kāi)。

目錄

封裝

封裝是面向?qū)ο缶幊倘筇匦灾弧?/p>

核心思想1 :將屬性和行為作為一個(gè)整體來(lái)表現(xiàn)生活中的事物。

class People {
public:
    string name;
    void eat();
privatestring sex;
};

注意: 類中的屬性和行為統(tǒng)稱為成員屬性成員稱為成員變量,行為成員稱為成員函數(shù)

核心思想2 :對(duì)屬性和行為使用權(quán)限控制

面向?qū)ο缶幊讨械臋?quán)限包括:

  • 1.public 公共權(quán)限,所有類中都可以訪問(wèn)
  • 2.protected 受保護(hù)權(quán)限,只有當(dāng)前類和子類可以訪問(wèn)
  • 3.private 私有權(quán)限,只有當(dāng)前類可以訪問(wèn)。

一般封裝原則:

對(duì)所有成員變量使用private權(quán)限,并使用public成員函數(shù)set和get對(duì)成員變量進(jìn)行讀寫(xiě)操作,可以防止成員變量對(duì)外暴露。

繼承

繼承是面向?qū)ο缶幊踢^(guò)程中一個(gè)很重要的特性,它允許開(kāi)發(fā)者保存原有類的特性基礎(chǔ)上進(jìn)程擴(kuò)展,增加功能等。 新繼承的類稱為派生類(java中習(xí)慣叫子類),而被繼承的類稱為基類(java中習(xí)慣叫父類)。

對(duì)于有java基礎(chǔ)的同學(xué)來(lái)說(shuō)再熟悉不過(guò)了,所以對(duì)于Android開(kāi)發(fā)者來(lái)說(shuō),對(duì)C++上手會(huì)比其他程序員更快些,雖然字面意思類似,但是C++的繼承和java還是有很多區(qū)別的,下面小余會(huì)一一道來(lái)。

繼承的格式

class 派生類名:繼承方式 基類的名稱
class A :public B

繼承基礎(chǔ)代碼:

class Father {
public:
    string name = "father";
    int age = 45;
};
class Son :public Father {
public:
    string sex = "male";
    void print() {
        cout << "name:" << name << " age:" << age << " sex:" << sex << endl;
    }
};

void extendsTest::mainTest()
{
    Son son;
    son.print();
};
打印結(jié)果:
name:father age:45 sex:male

基類中的name和age是子類和父類共有的成員變量,每個(gè)人都有名字和年齡,雖然子類中沒(méi)有定義,但是可以從父類中繼承過(guò)來(lái),這就是繼承的意義。

而sex屬性是子類Son中獨(dú)有的成員變量。父類獨(dú)有的元素可以使用private修飾,表示這個(gè)元素屬于當(dāng)前父類持有,子類也不可獲取,這個(gè)大家都理解。

這里要說(shuō)下在子類定義繼承過(guò)程中對(duì)父類的繼承方式是有說(shuō)法的 :如下的public

class Son :public Father
類成員/繼承方式 public繼承 protected繼承 private繼承
父類的public成員 子類的public成員 子類的protected成員 子類private成員
父類的protected成員 子類的protected成員 子類的protected成員 子類private成員
父類的private成員 子類不可見(jiàn) 子類不可見(jiàn) 子類不可見(jiàn)

權(quán)限記住規(guī)則:

子類的權(quán)限受限于父類的權(quán)限以及子類繼承的方式,子類對(duì)父類的繼承方式只是對(duì)父類的成員進(jìn)行再封裝,大部分情況下使用public繼承方式即可。除非不想讓其他類引用該類的父類元素。

子類與父類有同名屬性或者方法

假設(shè)子類有父類同名元素,則優(yōu)先使用子類的元素

class Father {
public:
    string name = "father";
    int age = 45;
};
class Son :public Father {
public:
    string sex = "male";
    string name = "son";
    void print() {
        cout << "name:" << name << " age:" << age << " sex:" << sex << endl;
    }
};

void extendsTest::mainTest()
{
    Son son;
    son.print();
};

打印結(jié)果:
name:son age:45 sex:male

如果此時(shí)一定需要訪問(wèn)父類的元素呢?加上父類修飾符即可。

void print() {
    cout << "name:" << Father::name << " age:" << age << " sex:" << sex << endl;
}

同名方法呢?這里就涉及到了面向?qū)ο缶幊讨械暮瘮?shù)重載多態(tài)問(wèn)題了,后面再講解

單繼承和多繼承

C++中的繼承不像java中那樣,只能繼承一個(gè)父類,C++中可以繼承多個(gè)父類, 所以就有單繼承和多繼承的區(qū)別:

單繼承

只有一個(gè)父類

class Apublic B{

}

多繼承

有多個(gè)父類

class A:public B,public C {

}

菱形繼承

菱形繼承圖:

圖片

菱形繼承會(huì)有啥問(wèn)題呢?

class A {
public:
    string name;
};
class B :public A {
public:
    int age;
};
class C :public A {
public:
    string sex;
};
class D :public B, public C {
public:
    int id;
};
int main()
{
    D student;
    student.name = "小明";
    student.age = 18;
    student.sex = "男";
    student.id = 666;
    return 0;
}

問(wèn)題出來(lái)了:

圖片

原因是B和C同時(shí)繼承了A,所以B和C同時(shí)都擁有name屬性,直接使用student.name,編譯器無(wú)法確定name是屬于哪個(gè)類,此時(shí)有以下解決方法:

  • 方式1 :明確指明當(dāng)前name屬于哪個(gè)類
student.B::name = "小明";
  • 方式2 :虛繼承:在繼承方式前加上virtual。
class B :virtual  public A {
public:
    int age;
};
class C :virtual public A {
public:
    string sex;
};

多繼承是C++復(fù)雜的一個(gè)體現(xiàn)。有了多繼承,就存在菱形繼承,為了解決菱形繼承,又出現(xiàn)了菱形虛擬繼承,其底層實(shí)現(xiàn)又很復(fù)雜。所以 一般不建議設(shè)計(jì)出多繼承,一定不要設(shè)計(jì)出菱形繼承

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Labview 之面向對(duì)象編程。 里面有個(gè)例子 和視頻教程地址

    Labview 之面向對(duì)象編程。 里面有個(gè)例子 和視頻教程地址Labview 之面向對(duì)象編程。
    發(fā)表于 12-29 10:16

    C++ 面向對(duì)象多線程編程下載

    C++ 面向對(duì)象多線程編程下載
    發(fā)表于 04-08 02:14 ?70次下載

    C++面向對(duì)象多線程編程 (pdf電子版)

    C++面向對(duì)象多線程編程共分13章,全面講解構(gòu)建多線程架構(gòu)與增量多線程編程技術(shù)。第1章介紹了
    發(fā)表于 09-25 09:39 ?0次下載

    C++課件

     C++面向對(duì)象程序設(shè)計(jì) 面向對(duì)象思想的由來(lái)面向
    發(fā)表于 04-10 13:41 ?0次下載

    Visual C++面向對(duì)象與可視化程序設(shè)計(jì)習(xí)題解析與編程實(shí)

    Visual C++面向對(duì)象與可視化程序設(shè)計(jì)習(xí)題解析與編程實(shí)例從最基本的概念出發(fā),詳細(xì)地講述了使用Visual C++進(jìn)行
    發(fā)表于 07-12 15:16 ?0次下載
    Visual <b class='flag-5'>C++</b><b class='flag-5'>面向</b><b class='flag-5'>對(duì)象</b>與可視化程序設(shè)計(jì)習(xí)題解析與<b class='flag-5'>編程</b>實(shí)

    C++編程思想

    C++編程思想,很好的資料,大家下載看看吧!夠20字了吧,哈哈哈!
    發(fā)表于 11-17 11:38 ?0次下載

    面向對(duì)象的程序設(shè)計(jì)(C++

    面向對(duì)象的程序設(shè)計(jì)(C++).面向對(duì)象的基本思想 C++
    發(fā)表于 03-22 14:40 ?0次下載

    C#入門教程之面向對(duì)象編程簡(jiǎn)介的詳細(xì)資料概述

    本文檔的主要內(nèi)容詳細(xì)介紹的是C#入門教程之面向對(duì)象編程簡(jiǎn)介的詳細(xì)資料概述主要學(xué)習(xí)的目標(biāo)是1.面向
    發(fā)表于 12-05 11:54 ?35次下載
    <b class='flag-5'>C</b>#入門教程<b class='flag-5'>之面向</b><b class='flag-5'>對(duì)象</b><b class='flag-5'>編程</b>簡(jiǎn)介的詳細(xì)資料概述

    C++語(yǔ)言和面向對(duì)象程序設(shè)計(jì)教程

    C++語(yǔ)言和面向對(duì)象程序設(shè)計(jì)代表了旨在使計(jì)算機(jī)問(wèn)題解更加符合人的思維活動(dòng),是軟件開(kāi)發(fā)方法的一場(chǎng)革命;面向對(duì)象建模和
    發(fā)表于 03-02 08:00 ?6次下載

    STM32 C++編程系列二:STM32 C++代碼封裝初探

    一、STM32與面向對(duì)象編程上一章中提到了,C++的核心之一就在于面向對(duì)象
    發(fā)表于 12-08 11:06 ?13次下載
    STM32 <b class='flag-5'>C++</b><b class='flag-5'>編程</b>系列二:STM32 <b class='flag-5'>C++</b>代碼封裝初探

    嵌入式C語(yǔ)言面向對(duì)象編程應(yīng)用及優(yōu)勢(shì)

    既然面向對(duì)象是一種編程思想,而編程語(yǔ)言只是一種工具,那么,思想與工具之間就不存在一種強(qiáng)耦合的關(guān)系
    發(fā)表于 11-10 12:00 ?2117次閱讀
    嵌入式<b class='flag-5'>C</b>語(yǔ)言<b class='flag-5'>面向</b><b class='flag-5'>對(duì)象</b><b class='flag-5'>編程</b>應(yīng)用及優(yōu)勢(shì)

    C語(yǔ)言是怎么面向對(duì)象編程

    在嵌入式開(kāi)發(fā)中,C/C++語(yǔ)言是使用最普及的,在C++11版本之前,它們的語(yǔ)法是比較相似的,只不過(guò)C++提供了面向
    的頭像 發(fā)表于 02-14 13:57 ?2140次閱讀
    <b class='flag-5'>C</b>語(yǔ)言是怎么<b class='flag-5'>面向</b><b class='flag-5'>對(duì)象</b><b class='flag-5'>編程</b>

    C/C++之面向對(duì)象編程思想2

    C++作為一門在C和Java之間的語(yǔ)言,其既可以使用C語(yǔ)言中的高效指針,又繼承了Java中的面向對(duì)象編程
    的頭像 發(fā)表于 03-30 15:14 ?803次閱讀
    <b class='flag-5'>C</b>/<b class='flag-5'>C++</b><b class='flag-5'>之面向</b><b class='flag-5'>對(duì)象</b><b class='flag-5'>編程</b><b class='flag-5'>思想</b>2

    C/C++之面向對(duì)象編程思想3

    C++作為一門在C和Java之間的語(yǔ)言,其既可以使用C語(yǔ)言中的高效指針,又繼承了Java中的面向對(duì)象編程
    的頭像 發(fā)表于 03-30 15:16 ?809次閱讀
    <b class='flag-5'>C</b>/<b class='flag-5'>C++</b><b class='flag-5'>之面向</b><b class='flag-5'>對(duì)象</b><b class='flag-5'>編程</b><b class='flag-5'>思想</b>3

    淺談C語(yǔ)言面向對(duì)象編程思想

    C語(yǔ)言是一種面向過(guò)程的語(yǔ)言,但是也可以用結(jié)構(gòu)體和函數(shù)指針來(lái)模擬面向對(duì)象的特性,比如封裝、繼承和多態(tài)。
    發(fā)表于 11-02 12:27 ?1556次閱讀