第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

趣味 C++ 進(jìn)階

難度初級(jí)
時(shí)長(zhǎng) 8小時(shí) 0分
學(xué)習(xí)人數(shù)
綜合評(píng)分9.60
10人評(píng)價(jià) 查看評(píng)價(jià)
10.0 內(nèi)容實(shí)用
8.8 簡(jiǎn)潔易懂
10.0 邏輯清晰
  • #include <iosteam>

    #include "Data.h"


    void test1(Data data)

    {


    }


    void test2(Data * data)

    {

    ????//若傳入空指針,加判斷

    ????if (data == nullprt)

    ????{

    ????????return;

    ????}

    }

    void test3(Data & data)//傳引用不用做空指針判斷

    {

    ? ? //存在通過引用操作data對(duì)象的漏洞

    }


    void test3(const Data & data)//加上const 函數(shù)內(nèi)部無法操作data對(duì)象,規(guī)避漏洞。

    {

    ? ??

    }


    Data getData()

    {

    ????Data data;//新建一個(gè)對(duì)象 == 新開一片內(nèi)存

    ????return data;

    }


    int main()

    {

    ????Data data;//創(chuàng)建副本

    ????test 1(data);//操作副本

    ????test 2(&data);//指針操作

    ????test2(nullprt);//傳入空指針

    ????test3(data);//直接傳入對(duì)象,更便捷。


    ????Data data = getData();//調(diào)用結(jié)束,getData 返回的data內(nèi)存釋放,將之拷貝至新的內(nèi)存對(duì)象“=”左邊的那個(gè)data。(無形之中,資源浪費(fèi))

    ????const Data & data = getData();

    ????test3(data);//調(diào)用test3() 若data為const 修飾變量,test 函數(shù)內(nèi)部賦值也必須為const修飾。

    ????test3(getData());//簡(jiǎn)寫。

    ????return 0;

    }

    查看全部
  • 引用


    聲明方法:

    int main()

    {

    ? ? int A = 200;

    ????int & newA = A; //引用初始化

    ????newA = 90;

    ????printf("A:%d\n",A);//A被賦值為90,操作newA 相當(dāng)于操作A。

    ????return 0;

    }


    本質(zhì)相同:

    ????int * newA = &A;//指針newA指向變量A的地址;

    ????int & newA = A;//引用變量newA為A的地址。


    區(qū)別:

    指針:A *pa = &a;

    ??????????pa->data =20;

    ??????????pa->func();


    引用:A &ra = a;

    ????????? ra.data = 20;

    ????????? ra.func();

    1、指針可以不初始化,或初始化為空,引用不行。

    2、引用不允許二次指向。

    3、非大量?jī)?nèi)存操作時(shí)(例如數(shù)組),建議使用引用。

    查看全部
  • 純虛函數(shù)的寫法


    class ClassA

    {

    ????//定義

    ????public:

    ????????virtual int doWork() = 0;//純虛函數(shù)(父類不實(shí)現(xiàn),由子類實(shí)現(xiàn))

    ????????virtual int doWork();//虛函數(shù)

    };


    class ClassB

    {

    ????public:

    ? ? ? ? int doWork()?

    ????????{

    ????????????printf("ClassB::doWork() is called");

    ????????}?

    };


    調(diào)用方法:

    ?int main()

    {

    ????ClassA *ca = new classB();

    ?????ca->doWork();//調(diào)用了ClassB的doWork方法;

    ???? return0;

    }


    注意點(diǎn):

    1、虛函數(shù)在實(shí)現(xiàn)時(shí),若子類需調(diào)用析構(gòu)函數(shù),父類的析構(gòu)函數(shù)在定義時(shí)需加上virtual 前綴,否則默認(rèn)調(diào)用父類的析構(gòu),子類的析構(gòu)無法被調(diào)用。

    2、1中若構(gòu)造函數(shù)中開辟了新的堆內(nèi)存,有內(nèi)存溢出的風(fēng)險(xiǎn)。?

    查看全部
    • malloc函數(shù)是C語言中用于動(dòng)態(tài)內(nèi)存分配的標(biāo)準(zhǔn)庫(kù)函數(shù).

    • 在使用malloc函數(shù)之前,需要包含stdlib.h頭文件,以獲得該函數(shù)的聲明

    • 調(diào)用malloc函數(shù)時(shí),需要指定要分配的內(nèi)存大小,參數(shù)為size_t類型,表示要分配的字節(jié)數(shù)。例如 malloc(2*sizeof(int))

    查看全部
  • 0x0102轉(zhuǎn)化成0x0110

    0001 0010

    小端字節(jié)序 little endian (低地址)0010 0001 (高地址)? 大部分機(jī)器(電腦)

    大端字節(jié)序 big endian (低地址)0001 0010 (高地址) IO方面(網(wǎng)絡(luò)細(xì)節(jié)序)

    查看全部
  • https://img1.sycdn.imooc.com/679115be09cf4c7b03550157.jpg

    &(與運(yùn)算)參加運(yùn)算的兩個(gè)數(shù)據(jù),按二進(jìn)制位進(jìn)行與運(yùn)算。如果兩個(gè)相應(yīng)的二進(jìn)制位都為1,則該位的結(jié)果值為1,否則為0。

    |(或運(yùn)算)兩個(gè)相應(yīng)的二進(jìn)制位中只要有一個(gè)為1,該位的結(jié)果值為1。

    ^(異或)若參加運(yùn)算的兩個(gè)二進(jìn)制位值相同則為0,否則為1。

    ~(取反)這是一元運(yùn)算符,用于求整數(shù)的二進(jìn)制反碼,即分別將操作數(shù)各二進(jìn)制位上的 1 變?yōu)?0,0 變?yōu)?1。

    <<(左移)各位全部左移若干位,高位丟棄,低位補(bǔ) 0 。

    >>(右移)各二進(jìn)位全部右移若干位,對(duì)無符號(hào)數(shù),高位補(bǔ) 0 ,有符號(hào)數(shù),各編譯器處理方法不一樣,有的補(bǔ)符號(hào)位,有的補(bǔ) 0 。

    查看全部
  • 通常第一位為符號(hào)位,0代表正,1代表負(fù)

    7

    0111

    1111 原碼 (帶符號(hào)位)

    1000 反碼(除符號(hào)位取反)

    1001 補(bǔ)碼 (反碼+1,為負(fù)數(shù)(-7))

    查看全部
  • 防止內(nèi)存泄露,用父類引用的時(shí)候,銷毀對(duì)象防止無法調(diào)用到子類析構(gòu)函數(shù)
    查看全部
  • 所以,只要你的編譯器兼容 C++11 標(biāo)準(zhǔn),那么你應(yīng)該使用 nullptr。

    查看全部
    0 采集 收起 來源:C++ 中的空指針

    2024-03-24


  • 將父類的析構(gòu)函數(shù)聲明為虛函數(shù),作用是用父類的指針刪除一個(gè)派生類對(duì)象時(shí),派生類對(duì)象的析構(gòu)函數(shù)會(huì)被調(diào)用。

    此時(shí)如果析構(gòu)函數(shù)不加 virtual,那么 delete 父類指針的時(shí)候,子類的析構(gòu)就不會(huì)被調(diào)用,某些情況下會(huì)導(dǎo)致內(nèi)存泄漏。

    查看全部
  • 我們之前講述了什么是多態(tài),還用了一個(gè)例子,將一個(gè)指針的類型做成強(qiáng)轉(zhuǎn),然后調(diào)用 func 函數(shù),就會(huì)發(fā)現(xiàn), func 函數(shù)會(huì)隨著被強(qiáng)轉(zhuǎn)的類型的變換而變換,這種函數(shù)的關(guān)聯(lián)過程稱為編聯(lián)。按照聯(lián)編所進(jìn)行的階段不同,可分為兩種不同的聯(lián)編方法:靜態(tài)聯(lián)編和動(dòng)態(tài)聯(lián)編。

    查看全部
  • 我們其實(shí)可以把一個(gè)員工強(qiáng)行轉(zhuǎn)化成程序員,但是這就有可能出問題,就如同我們把 long long 轉(zhuǎn)成 int 就有可能出現(xiàn)問題。

    int main(int argc,char **argv)
    {
    ? ?Coder * coder = new Coder();

    ? ?Staff * staff = coder; // 隱式轉(zhuǎn)換就可以
    ? ?Coder * coder = (Coder *)staff; // 必須顯式轉(zhuǎn)換

    ? ?return 0;
    }

    查看全部
  • 我們之前已經(jīng)講過,可以為成員變量和成員函數(shù)設(shè)置權(quán)限修飾符來設(shè)置權(quán)限。但是這在繼承的時(shí)候就會(huì)產(chǎn)生一個(gè)問題:子類中是否要保持對(duì)父類成員的權(quán)限,而 C++ 將這個(gè)選擇權(quán)交給了程序員。

    在 C++ 中,對(duì)父類成員的權(quán)限,子類中可以進(jìn)行重新的定義,這個(gè)定義就是通過繼承時(shí)候?qū)懙膒ublic 來實(shí)現(xiàn)的。

    可以看到,我們?cè)谏鲜龀绦蛑惺褂昧?public 修飾符,那么父類中的成員函數(shù)和成員變量將會(huì)保持父類的權(quán)限。這種是使用最廣泛的繼承方式,我們把它叫做公有繼承。

    查看全部
  • private

    用來指定私有成員。一個(gè)類的私有成員,不論是成員變量還是成員函數(shù),都只能在該類的內(nèi)部才能被訪問

    int main(int argc,char **argv)
    {
    ? ?A a;
    ? ?a.a = 15; // 會(huì)報(bào)錯(cuò),因?yàn)槌蓡T變量是 private 的
    ? ?return 0;
    }

    public

    用來指定公有成員。一個(gè)類的公有成員在任何地方都可以被訪問。

    int main(int argc,char **argv)
    {
    ? ?A a;
    ? ?a.a = 15; // 不會(huì)報(bào)錯(cuò),因?yàn)槌蓡T變量是 public 的
    ? ?return 0;
    }

    protected

    用來指定保護(hù)成員。一般是允許在子類中訪問

    查看全部
  • 要將對(duì)象分配到堆上,需要用到另外兩個(gè)關(guān)鍵字,new 和 delete。new 用來分配對(duì)象,delete 用來刪除對(duì)象。new 會(huì)返回一個(gè)指針,在使用完畢后,要通過 delete 把這個(gè)指針指向的地址釋放掉。

    #include "Staff.h"

    int main(int argc,char **argv)
    {
    ? ?// 我們就這樣實(shí)例化了三個(gè)員工
    ? ?Staff * st1 = new Staff();
    ? ?Staff * st2 = new Staff();
    ? ?Staff * st3 = new Staff();

    ? ?// 記得釋放
    ? ?delete st1;
    ? ?delete st2;
    ? ?delete st3;

    ? ?return 0;
    }

    查看全部
  • 但是我們需要思考的是,什么情況下我們要返回一個(gè)指針,返回指針的時(shí)候需要我們注意些什么?

    通常情況下,我們是希望為函數(shù)外提供一片內(nèi)存,例如,我們可以給函數(shù)外面提供一個(gè)數(shù)組。

    int * func()
    {
    ? ?int arr[] = {1, 2, 3, 4};
    ? ?return arr;
    }

    但是這樣寫得話,程序會(huì)崩潰掉。原因是,arr 數(shù)組是一個(gè)局部變量,在 func 結(jié)束之后,其內(nèi)存就被銷毀掉了。此時(shí)在函數(shù)外面對(duì)其進(jìn)行操作,自然會(huì)出問題。所以,要完成這類操作,我們需要把內(nèi)存分配到堆內(nèi)存上面。

    int * func()
    {
    ? ?int * arr = (int *)malloc(4 * sizeof(int));
    ? ?return arr;
    }

    這樣就沒有問題了,當(dāng)然,既然是分配在了堆內(nèi)存上,就要記得手動(dòng)銷毀。

    int main(int argc,char **argv)
    {
    ? ?int * p = func();
    ? ?free(p);
    ? ?return 0;
    }

    查看全部
  • 字節(jié)序,就是 大于一個(gè)字節(jié)類型的數(shù)據(jù)在內(nèi)存中的存放順序。

    計(jì)算機(jī)硬件有兩種儲(chǔ)存數(shù)據(jù)的方式:大端字節(jié)序(big endian)和小端字節(jié)序(little endian)。

    我們現(xiàn)在有一個(gè)整數(shù)是258。用16進(jìn)制表示是0x0102,然后我們把這個(gè)整數(shù)拆分成兩個(gè)字節(jié),第一個(gè)字節(jié)為 0000 0001,第二個(gè)字節(jié)為 0000 0010。

    如果在一個(gè)使用大端字節(jié)序的電腦上,這個(gè)整數(shù)會(huì)被這樣存放:

    如果一個(gè)使用小端字節(jié)序的電腦上,這個(gè)整數(shù)的高字節(jié)就會(huì)存放在高地址上:

    現(xiàn)在大部分的機(jī)器,都采用了小端字節(jié)序。但是在 IO 方面,則大部分使用大端字節(jié)序。例如,你要使用網(wǎng)絡(luò)發(fā)送一個(gè) int 類型的變量,要先把 int 轉(zhuǎn)換成大端字節(jié)序,然后通過網(wǎng)絡(luò)發(fā)送。

    大端字節(jié)序又被稱之為網(wǎng)絡(luò)細(xì)節(jié)序。

    查看全部
  • << 左移

    各位全部左移若干位,高位丟棄,低位補(bǔ) 0 。

    >> 右移

    各二進(jìn)位全部右移若干位,對(duì)無符號(hào)數(shù),高位補(bǔ) 0 ,有符號(hào)數(shù),各編譯器處理方法不一樣,有的補(bǔ)符號(hào)位,有的補(bǔ) 0 。

    查看全部
  • std::string 是 C++ 中用來存放字符串的類型
    查看全部
  • #include <stdio.h>

    #include <stdlib.h>

    #include <iostream>




    int main(int? argc,char ** argv)

    {

    ? ? char source[20]={'a'};

    ? ? char* originP= source;

    ? ? *(originP+15)='c';

    ? ? *(originP+16)='d';

    ? ? *(originP+17)='e';

    ? ? *(originP+18)='f';

    ? ? *(originP+19)='g';

    ? ??

    ? ? char target[5]={'b','b','b','b','b'};

    ? ??

    ? ? char* targetP=target;

    ? ? ?std::cout <<"origin value:"<<? target[1] <<','<<target[1] <<std::endl;

    ? ??

    ? ? memcpy(targetP,originP+15,5);

    ? ? std::cout << "new value:"<<target[0] << ","<< target[1] <<std::endl;

    ? ? return 0;

    }

    查看全部
  • #include?<iostream>
    #include?<stdio.h>
    using?namespace?std;
    
    int?main()
    {
    ????int?a;
    ????cin>>a;
    ????cout<<a;
    
    
    
    ????return?0;
    }
    查看全部
  • 將指針指向數(shù)組,不需要使用取址符&,并且表示的是指針執(zhí)行數(shù)組第一個(gè)元素的地址:

    int * p = arr 與 int * p = &arr[0]是相同的操作。

    指針的加減法:

    1. 想要讓指針p指向第二個(gè)元素,只需要p+1就可以了。?

    注意:p+1的操作實(shí)際上是指針存放的地址+指針類型的大小。如果指針是一個(gè)int*的類型,則p+1就是向后移動(dòng)4個(gè)字節(jié)的位置,如果是char*的類型,p+1則是向后移動(dòng)2個(gè)字節(jié)的位置。

    2. 指針支持p++、p--的操作

    指針除了可以指向數(shù)組外,還可以指向一個(gè)結(jié)構(gòu)體。

    查看全部
  • 計(jì)算機(jī)中小數(shù)表示方法:

    定點(diǎn)數(shù)容易造成空間浪費(fèi),

    使用浮動(dòng)的小數(shù)點(diǎn):


    ?浮點(diǎn)數(shù)按照 IEEE754標(biāo)準(zhǔn)存放的,符號(hào)位1位,指數(shù)8位,尾數(shù)23位:


    浮點(diǎn)數(shù)存在精度問題,當(dāng)場(chǎng)景中對(duì)精度要求較高,則不能使用浮點(diǎn)數(shù)存儲(chǔ)。

    查看全部
首頁(yè)上一頁(yè)1234567下一頁(yè)尾頁(yè)

舉報(bào)

0/150
提交
取消
課程須知
你需要具備基礎(chǔ)的 C++ 語法知識(shí),在學(xué)習(xí)本課程之前,建議先學(xué)習(xí)《趣味 C++ 入門》,快速認(rèn)識(shí) C++,熟悉 C++ 基本語法,更加快速入手進(jìn)階課程!
老師告訴你能學(xué)到什么?
在本門課程中,你將學(xué)習(xí)到:計(jì)算機(jī)存儲(chǔ)數(shù)據(jù)的原理、指針的進(jìn)階、面向?qū)ο缶幊?、?nèi)存管理技巧等 C++ 高級(jí)語法。在課程的最后,將帶領(lǐng)大家使用 C++ 編寫一個(gè)五子棋游戲,通過實(shí)踐,加深理解,鞏固學(xué)習(xí)成果。

微信掃碼,參與3人拼團(tuán)

微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

友情提示:

您好,此課程屬于遷移課程,您已購(gòu)買該課程,無需重復(fù)購(gòu)買,感謝您對(duì)慕課網(wǎng)的支持!