C++筆試復習

基礎知識點
  • C++中對象數組在定義的時候全部進行實例化(與Java不同,Java相當于只是定義了一個指針數組,沒有進行實例化)

  • 程序的三種基本控制結構是:順序結構、循環結構、選擇結構

  • 一個C++程序開發步驟通常包括:編輯、編譯、鏈接、運行和調試

  • 面向對象程序設計主要有四個特點:抽象、繼承、多態、封裝

  • C++中的兩種代碼復用方式:繼承和模板

  • 類是某一類對象的抽象,對象是類的具體實例,類和對象的關系是一種數據類型與變量的關系

  • 構造函數的作用是再創建對象的時候初始化對象的數據成員

  • 默認構造函數有兩種:無參構造函數和所有參數都有默認值的構造函數(兩者不能同時存在)

  • 常對象只能調用它的常成員函數,不能調用普通函數

  • 如果一個類沒有定義默認構造函數,但是定義了其他構造函數(有參的),編譯器將不會自動生成默認構造函數(此時如果派生類中沒有顯式調用父類的有參構造函數將會編譯出錯)

  • cinistream類的對象

  • 轉換構造函數只有一個參數,可以隱式地將其他類型轉換成該類類型。可以用explicit杜絕編譯器的隱式轉換。與之對應的還有類型轉換函數,可以將類類型轉換成其他類型。詳見:C++轉換構造函數和類型轉換函數

  • 析構函數的作用是提供一個在對象刪除前釋放該對象占用資源的機會

  • 構造函數順序和析構函數相反

  • 構造函數順序:虛基類->普通基類->成員對象->當前類詳見:C++派生類含有成員對象構造函數析構函數順序

  • 拷貝構造函數的使用:

    • 復制對象把它作為參數傳遞給函數
    • 復制對象從函數返回這個對象
    • 初始化另一個對象(必須是定義的時候,賦值不算)
  • 重載和函數的返回值沒有關系,只和函數名以及函數參數列表有關。派生類中只要函數名字和基類相同就會重寫。重寫以后我們將無法直接通過派生類對象訪問基類的同名函數,只能通過基類名::顯式訪問

  • 需要注意保護的成員我們也不可以通過對象訪問

  • this指針:在每一個非靜態成員函數中都包含一個特殊的指針,這個指針的名字是固定的,稱為this指針。他是指向本類對象的指針,他的值是當前被調用的成員函數所在對象的起始地址。這樣同一個類創建的多個對象共用同一份成員函數的拷貝也知道是取哪一個對象的成員數據。如果派生類中含有和基類相同名字的成員函數就會重寫

  • 要實現動態聯編一般通過對象指針調用虛函數

  • 在C++面向對象程序設計框架中是程序的基本組成單位

  • delete只能釋放用new運算符分配的內存

  • 靜態數據成員只能在類外定義和初始化,格式為

    數據類型 類名::變量名=初值;
    

    不需要static關鍵字

  • 編譯器自動生成的拷貝構造函數可能會產生什么問題:當對象有指針數據成員,并用它初始化同類型的另一個對象時,缺省的拷貝構造函數只能將對象的數據成員賦值賦給另一個對象,而布恩那個將該對象中指針所指向的內存單元也復制一份。這樣就可能出現同一內存單元釋放兩次,或者傳遞參數后實參中的地址無效,導致程序運行出錯。

  • 使用虛基類是為了解決多重繼承中的二義性問題

  • 靜態函數沒有this指針

  • 描述友元函數的時候應該說明是哪個類的友元函數

  • 拷貝構造函數同樣是構造函數,因此和構造函數的調用順序一樣,調用順序為虛基類->基類->成員對象->拷貝構造函數

#include<iostream>
#include<string>using namespace std;class A
{int val;
public:A(){val = 0; cout << "A():" << val << endl;}A(int v){val = v; cout << "A():" << val << endl;}
};class B :public A
{A obj;
public:B(int v1, int v2) :A(v1), obj(v2){cout << "B()" << endl;}B(const B& x){cout << "Copy B()" << endl;}
};int main()
{B obj1(2, 3);B obj2(obj1);
}

運行結果:
在這里插入圖片描述

  • 結構化的程序設計與面向對象的程序設計:結構化的程序設計將數據和對數據的操作分離,程序是由一個個函數組成的。面向對象的程序設計將數據和操作封裝在一起,程序是由一個個對象組成的,對象之間通過接口進行通信,它能夠較好地支持程序代碼的復用。
  • 類和結構體都是C++中用戶自定義的數據類型。
  • 從實現的角度來講,多態性可以劃分為兩類:靜態多態性、動態多態性
虛函數
  • 不能聲明為虛函數的函數:普通函數、構造函數、靜態函數、內聯成員函數、友元函數。成為虛函數的特點是:可以被重寫/重載,可以在運行時才確定。詳見:C++不能被聲明為虛函數
  • 虛函數用于實現動態多態性
  • 純虛函數實在基類中說明的虛函數,它在該基類中沒有定義具體的操作內容。含有純虛函數的類稱為抽象類,抽象類不能被實例化(可以定義指針和引用),必須由他的派生類完成對純虛函數的定義
友元函數
  • 友元函數不是成員函數,破環隱蔽性,盡量減少使用。友元函數可以提高程序運行效率,節約了調用類成員函數的開銷
運算符重載
  • 不能進行重載的運算符:.成員訪問運算符.* ->*成員指針訪問運算符::域運算符?:條件運算符#預處理運算符,詳見:【C++學習筆記四】運算符重載
  • 運算符重載以后,要求其保持原來的操作數個數、優先級、結合性、語法結構
  • 后綴自增運算符的第一個參數(如果還有其他參數的話)必須是int,這樣做是為了區分前綴和后綴
  • 運算符函數可以重載為成員函數、友元函數和普通函數。但是有的運算符只能重載為成員函數:= [] () ->
模板
  • 類模板的使用是將上是將類模板實例化成一個類
  • 對于模板類我們只有要用到的時候才會進行實例化:
    • 模板類作為函數聲明的參數不會實例化
    • 定義模板類的指針和引用不會實例化
    • 但是如果進行定義時(其他類中含有模板類成員、函數參數或者函數體中含有模板類)以及模板類指針需要訪問成員時都會進行實例化。
    • 需要知道模板類大小的操作都需要進行實例化。如new sizeof運算符等。詳見:C++類模板實例化條件
繼承、基類指針指向派生類對象
  • 私有繼承不允許基類指針指向派生類
    • 基類指針只能訪問到基類中含有的公有成員
    • 當用基類指針指向派生類對象在動態分配堆上內存的時候,析構函數必須是虛函數
      詳見:C++基類指針指向派生類(指針)
流輸入流輸出
  • 重載流插入運算符<< 重載流提取運算符>>
  • cinistream的對象,coutostream的對象
const的用法

可以閱讀這個博客,已經將的超級詳細了:傳送門

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/383775.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/383775.shtml
英文地址,請注明出處:http://en.pswp.cn/news/383775.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++函數默認參數

聲明是用戶可以看到的部分&#xff0c;客戶非常信任地使用這個特性&#xff0c;希望得到一定的結果&#xff0c;但是你在實現里使用了不同的缺省值&#xff0c;那么將是災難性的。因此編譯器禁止聲明和定義時同時定義缺省參數值。 類的成員函數的參數表在聲明時默認參數位于參…

C語言鏈表各類操作詳解

http://blog.csdn.net/pf4919501/article/details/38818335鏈表概述   鏈表是一種常見的重要的數據結構。它是動態地進行存儲分配的一種結構。它可以根據需要開辟內存單元。鏈表有一個“頭指針”變量&#xff0c;以head表示&#xff0c;它存放一個地址。該地址指向一個元素。…

Java筆試復習

Java程序運行 Java程序的執行必須經過編輯、編譯和運行三個步驟 編輯指編寫代碼&#xff0c;最終形成后綴名為.java的Java源文件編譯指使用Java編譯器&#xff08;javac指令&#xff09;將源文件翻譯為二進制代碼&#xff0c;編譯后生成后綴名為.class的字節碼文件&#xff0c…

數據結構之自建算法庫——鏈棧

http://blog.csdn.net/sxhelijian/article/details/48463801本文針對數據結構基礎系列網絡課程(3)&#xff1a;棧和隊列中第4課時棧的鏈式存儲結構及其基本運算實現。 按照“0207將算法變程序”[視頻]部分建議的方法&#xff0c;建設自己的專業基礎設施算法庫。 鏈棧算法庫采用…

Java類名與包名不區分大小寫

剛才寫了一個簡單的Java程序&#xff0c;經過測試得到一個令人震驚的結論&#xff1a;Java類名和包名是不區分大小寫的 可以看一下這個例子&#xff1a; package Test;class aBcdEfG {}class AbCdefg {}public class TTT {public static void main(String[] args){AbCdefg tm…

epoll實現高并發聊天室

http://blog.csdn.net/qq_31564375/article/details/51581038項目介紹 本項目是實現一個簡單的聊天室&#xff0c;聊天室分為服務端和客戶端。本項目將很多復雜的功能都去掉了&#xff0c;線程池、多線程編程、超時重傳、確認收包等等都不會涉及。總共300多行代碼&#xff0c;讓…

BZOJ2809-左偏樹合并

Description 在一個忍者的幫派里&#xff0c;一些忍者們被選中派遣給顧客&#xff0c;然后依據自己的工作獲取報償。在這個幫派里&#xff0c;有一名忍者被稱之為 Master。除了 Master以外&#xff0c;每名忍者都有且僅有一個上級。為保密&#xff0c;同時增強忍者們的領導力&a…

處理大并發之一 對epoll的理解,epoll客戶端服務端代碼

http://blog.csdn.net/zhuxiaoping54532/article/details/56494313處理大并發之一對epoll的理解&#xff0c;epoll客戶端服務端代碼序言&#xff1a;該博客是一系列的博客&#xff0c;首先從最基礎的epoll說起&#xff0c;然后研究libevent源碼及使用方法&#xff0c;最后研究n…

epoll詳解

http://blog.csdn.net/majianfei1023/article/details/45772269歡迎轉載&#xff0c;轉載請注明原文地址&#xff1a;http://blog.csdn.net/majianfei1023/article/details/45772269一.基本概念&#xff1a;1.epoll是什么&#xff1a;epoll是Linux內核為處理大批量文件描述符而…

數據分割-并查集+set

小w來到百度之星的賽場上&#xff0c;準備開始實現一個程序自動分析系統。 這個程序接受一些形如xixj 或 xi≠xj 的相等/不等約束條件作為輸入&#xff0c;判定是否可以通過給每個 w 賦適當的值&#xff0c;來滿足這些條件。 輸入包含多組數據。 然而粗心的小w不幸地把每組數據…

linux c++線程池的實現

http://blog.csdn.net/zhoubl668/article/details/8927090?t1473221020107 線程池的原理大家都知道&#xff0c;直接上代碼了^_^ Thread.h [cpp] view plaincopy #ifndef __THREAD_H #define __THREAD_H #include <vector> #include <string> #inc…

樹啟發式合并入門

所謂啟發式合并&#xff0c;就是一種符合直覺的合并方法&#xff1a;將小的子樹合并在大的子樹上。 這些問題一般是相似的問題背景&#xff1a;都是樹上的計數問題&#xff0c;都不能直接從上往下進行暴力&#xff0c;都需要從下往上計數時對子樹信息進行運算從而得到父親節點的…

鏈棧基本操作

http://blog.csdn.net/jwentao01/article/details/46765517###;棧基本概念&#xff1a; 棧&#xff08;stack&#xff09;是限定在表尾進行插入和刪除操作的線性表&#xff08;或單鏈表&#xff09;。 //只能在一段進行插入和刪除&#xff0c;因此不存在&#xff0c;在中間進行…

Linux網絡編程---I/O復用模型之select

https://blog.csdn.net/men_wen/article/details/53456435Linux網絡編程—I/O復用模型之select 1. IO復用模型 IO復用能夠預先告知內核&#xff0c;一旦發現進程指定的一個或者多個IO條件就緒&#xff0c;它就通知進程。IO復用阻塞在select或poll系統調用上&#xff0c;而不是阻…

UVa12633-Super Rooks on Chessboard-容斥+FFT

題目大意就是給你一個R*C的棋盤&#xff0c;上面有超級兵&#xff0c;這種超級兵會攻擊 同一行、同一列、同一主對角線的所有元素&#xff0c;現在給你N個超級兵的坐標&#xff0c;需要你求出有多少方塊是不能被攻擊到的(R,C,N<50000) 遇到這種計數問題就要聯想到容斥&#…

Linux網絡編程---I/O復用模型之poll

https://blog.csdn.net/men_wen/article/details/53456474Linux網絡編程—I/O復用模型之poll 1.函數poll poll系統調用和select類似&#xff0c;也是在指定時間內輪詢一定數量的文件描述符&#xff0c;以測試其中是否有就緒者。 #include <poll.h>int poll(struct pollfd…

FFT模板

整理了一下&#xff0c;自己寫了一下模板 const double PIacos(-1.0); struct complex {double r,i;complex(double _r0,double _i0):r(_r),i(_i){}complex operator (const complex &b) {return complex(rb.r,ib.i);}complex operator -(const complex &b) {return c…

Linux網絡編程---I/O復用模型之epoll

https://blog.csdn.net/men_wen/article/details/53456474 Linux網絡編程—I/O復用模型之epoll 1. epoll模型簡介 epoll是Linux多路服用IO接口select/poll的加強版&#xff0c;e對應的英文單詞就是enhancement&#xff0c;中文翻譯為增強&#xff0c;加強&#xff0c;提高&…

POJ 1741tree-點分治入門

學習了一下點分治&#xff0c;如果理解有誤還請不吝賜教。 為了快速求得樹上任意兩點之間距離滿足某種關系的點對數&#xff0c;我們需要用到這種算法。 點分治是樹上的一種分治算法&#xff0c;依靠樹和子樹之間的關系進行分治從而降低復雜度。 和其他樹上的算法有一些區別…

基于單鏈表的生產者消費者問題

『生產者與消費者問題分析』「原理」生產者生產產品&#xff0c;消費者消費產品。產品如果被消費者消費完了&#xff0c;同時生產者又沒有生產出產品&#xff0c;消費者 就必須等待。同樣的&#xff0c;如果生產者生產了產品&#xff0c;而消費者沒有去消費&#x…