1. 程式人生 > >學習總結1(c/c++的不同)

學習總結1(c/c++的不同)

1.C++的區域性變數在呼叫前宣告即可

C的區域性變數需要在函式開始宣告

tips:區域性變數的作用域是它的母括號

2.關鍵字namespace的使用

在C++中我們經常會碰到"using namespace"等字元,namespace就是名稱空間,而using 屬於宣告;
1.1  名稱空間的概念
 C++中採用單一的全域性變數的名稱空間,如果在一個空間中,兩個變數或函式的名字一樣,編譯的時候就會
 衝突。名稱空間就是為了解決C++中函式變數的命名衝突所採取的一種措施,能夠解決多模組協同開發出現
 變數函式命名的衝突問題。
     在這裡面可以把名稱空間理解成資料夾,如果你在hel1這個資料夾中編輯兩個hello.cpp肯定會出問題,但是如果
 一個在hel1,一個在hel2這個資料夾中p,這個就不會出現衝突。
 名稱空間的必要性: 當程式比較大的時候,需要多人合作,名稱空間就非常必要。
 
2  名稱空間的定義
名稱空間用namespace定義,格式如下:
namespace  名稱空間名
{
   名稱空間生命內容
}

例:
#include  <iostream>
using namespace std;     

namespace nsA
{
    void print()
    {
        cout<<"nsA"<<endl;
    }
}

namespace nsB
{
    void print()
    {
        cout<<"nsB"<<endl;
    }
}

int main()
{
    nsA::print();
    nsB::print();
    return  0;
}

3  名稱空間成員的使用
3.1  using 宣告
    using宣告可以出現在全域性域和任意名稱空間中,也可以出現在區域性域中。
    using  namespace_name::name;
    一旦使用using宣告,就可以直接引用名稱空間中的成員,而不需要再引用該成員的
    名稱空間。
    名稱空間std,這是最常用的名稱空間,而不需要再引用該成員的名稱空間。
   
    #include <string>
    #include <iostream>
    using std::cin;     //using宣告,表明要引用標準庫std中的成員cin;
    using std::string;  //using宣告,表明要引用標準庫std中的成員string;    
    
    int main()
    {
        string temp;   //正確,string已經宣告,可以直接使用
        cin>>temp;     //正確,cin已經宣告,可以直接使用
        cout<<temp;    //錯誤,cout未宣告,無法直接使用
        std::cout<<temp; //正確,通過全名使用cout,
        
        return 0;
    }

在using 指令中,using後面必須跟關鍵字namespace,而且最後必須為名稱空間名;
using 宣告中,關鍵字後面沒有namespace, 後面必須為名稱空間的成員名。

3.class

含有public和private變數,可以含有函式

4.new和delete

語法

指標變數 = new 資料型別;

單個空間

int * p = new int;

delete p;

一串空間

char * ptr = new char[50];

delete[] ptr;

 3. inline 行內函數
 
 函式呼叫的時候會發生一些時間開銷:系統棧的保護,引數的傳遞,棧的恢復;?
 對於函式體比較小,執行時間短但頻繁使用的函式來說,這種開銷比較大。
 行內函數機制,不是在函式呼叫的時候發生轉移而是在編譯的時候將函式體嵌入到每個行內函數
 呼叫處,可以省去呼叫進棧出棧的時間開銷。
 函式的定義:
 inline  <型別標識><函式名>(形參列表)
 {
    函式體
 }
 
 必要說明:
 1) 行內函數不能含有迴圈語句,swtich語句
 2) 行內函數必須在呼叫之前宣告和定義;
 3)行內函數不能指定丟擲異常型別;
 4)inline只是修飾函式向編譯器提出內聯請求,做不作為行內函數由編譯器決定;
 
 #include <iostream>
 using namespace std;
 inline  int max(int,int);
 
 int main()
 {
     int a[10];
     cout<<"input 10 members:"<<endl;
     
     for(i=0; i<10; i++)
     {
         cin>>a[i];
     }
     int temp=a[0];
     for(i=0; i<10; i++)
     {
         temp = max(temp, a[i]);
     }
     cout<<"in 10 members is max :"<<temp<<endl;
     return 0;
 }
 
 inline int max(int x,int y)
 {
    return x>=y>x:y;
 }
 

 4. 函式的過載
 C中,每個函式都必須有唯一的一個名字,這個就必須記住每一個函式的名字。
 例如經常所見的求最大值的函式,資料型別不同,函式名不能相同。
 int max1(int ,int);
 int max2(int ,int, int);
 double  max3(double, double);
 
 C++中允許同名函式存在,但函式的引數個數必須不同:即形參個數不同,或形參
 個數相同,但引數型別有所不同。----這就是過載。
 #include <iostream>
 
 using namespace std;
  
 int max(int,int);
 double max(double,double);
 int max(int,int,int);
  
 int main()
 {
     int i=5, j=9, k=10, p=0;
     double  m=33.4, n=8.9, q=0;
     p=max(i,j);
     cout<<i<<","<<j<<"max in two"<<p<<endl;
     p=max(i,j,k);
     cout<<i<<","<<j<<","<<k<<"max in three"<<p<<endl;
     q=max(m,n);
     cout<<m<<","<<n<<"max in two"<<q<<endl;
     
     return 0;
 }
 
 int max(int x,int y)
 {
     return x>y?x:y;
 }
 double max(double x,double y)
 {
     return x>y?x:y;
 }
 
 int max(int x,int y,int z)
 {
     int temp;
     temp = x>y?x:y;
     temp = temp>z?temp:z;
     return temp;
 }
 
 
 
 5. 帶預設值的函式
 函式呼叫時,形參值是由實引數決定,形參實參必須相同。
 C++還提供一種方法,為形參設定一個預設值,即形參不從實參取值。
 5.1 函式的宣告
 預設值在函式宣告中提供,但當有宣告又有定義時,定義中不允許有預設值。
 如果函式只有定義,則預設值可以出現在函式定義中。
 
 
 #include  <iostream>
 using namespace std;
 
 void point(int x,int y=0, int z=0)
 {
     cout<<"("<<x<<","<<y<<","<<z<<")"<<endl;
 }
 
 int main()
 {
    int x,y,z;
    
    cout<<"X, Y,Z:"<<endl;
    cin>>x>>y>>z;
    point(x);
    point(x,y);
    point(x,y,z);
    
    return 0;
 }
 
 
 5.2 帶預設值的形參順序規定
 在函式中有多個預設引數,則形參從最右邊依次向左設定。當呼叫函式時,只能向左匹配引數。
 錯誤的表示:
 void  point(int=0,int, int=0);
 void point(int=0,int=0,int);
 
 呼叫時:
point(x): ok
point(x,y);ok
point(x,y,z);ok


point(); error
point(x, , z); error


5.3 預設引數與函式過載
使用帶預設值的函式可以將一些簡單的函式合併為一個函式。但是如果一個函式不能既作為過載函式,
又作為帶預設值的函式。會出現二義性,系統無法執行。
例:point(int x,int y);
    point(int x,int y=0, int z=0);
    point(x,y);
    
    
5.4  預設值的限定
預設值:可以是全域性變數,全域性常量,也可以作為一個函式表示式。預設值不能是區域性變數。

相關推薦

學習總結1c/c++的不同

1.C++的區域性變數在呼叫前宣告即可 C的區域性變數需要在函式開始宣告 tips:區域性變數的作用域是它的母括號 2.關鍵字namespace的使用 在C++中我們經常會碰到"using namespace"等字元,namespace就是名稱空間,而using 屬於宣告

JDBC學習總結1JDBC基礎

001.JDBC 1.JDBC:java database connectivity  ;   java連線資料庫 簡單來說,jdbc就是一組規範;將對所有關係型資料庫的操作都抽象出來的規範; 作用:採用統一的方式來操作各種資料庫; 2.如何通過jdbc來訪

mysql資料庫基礎學習總結1基礎

001.資料庫基礎 1.什麼是資料     對客觀事物的符號表示,也是資訊的載體; 2.資料庫     用來管理資料的一個軟體;3.常見的關係型資料庫     oracle:oracle公司的資料庫;

MySQL學習筆記1增刪查改

nbsp 之間 values 自動 mon name mes 函數 mar 創建表: /* 創建數據庫 create database 數據庫名; */ CREATE DATABASE mybase; /* 使用數據庫 use 數據庫名 */ US

QT學習記錄1訊號與槽

使用,學習QT的背景 剛入職新公司,工作是嵌入式軟體,工作內容包括使用QT進行一些軟體的開發等,以前沒有接觸過QT,特意建立第一篇部落格,用作QT的學習過程記錄 入職後,公司前輩要求使用QT寫一個軟體,接收硬體裝置傳回的資料並顯示,同時軟體可以對裝置的工作方式進行設定,使用TCP通訊協議。

selenium3+webdriver學習筆記1訪問常用請求

一個 screens screen bin pre 最大 from scree Coding #!/usr/bin/env python# -*- coding:utf-8 -*-from selenium import webdriverimport osimport t

資料結構與演算法學習筆記 1 2018.10.05

演算法  計算=資訊處理          藉助某種工具,遵照一定規則,以明確而機械的形式進行 計算模型=計算機=資訊處理工具 所謂演算法,即特定計算模型下,旨在解決特定問題的指令序列         輸入      待處理的資訊(問題)         輸

機器學習學習筆記1Ng課程cs229

什麼是機器學習 作為機器學習領域的先驅,Arthur Samuel在 IBM Journal of Research and Development期刊上發表了一篇名為《Some Studies in Machine Learning Using the Gam

Java NIO學習總結非阻塞特性

NIO(New IO)是從Java 1.4版開始引入的新的IO API,其與標準JAVA IO API的差異本質上體現在資源的利用方式上,這一點可以從現實中餐廳排隊的例子來理解。午飯時間到了,小明準備從三家備選餐廳A、B、C中選擇一家就餐,糟糕的是三家餐廳的位置都滿了,小明

JPG學習筆記1附完整程式碼

  在學習圖象處理的過程中,JPEG是我的第一個攔路虎。一直很想手寫一下JPG的壓縮和解壓的過程,我在網上找到了一些程式碼或者文章,很多都是沒有註釋或者是解釋不夠清楚的。所以特地寫這篇文章記錄自己從無到有寫一個JPEG_Encoder的過程,也能幫助其他學習圖形或者音視訊的童鞋。對於不想看文章的同學,這邊直接

微信小程序後端開發總結~1C#

ali 存在 漢字轉換 返回 font con utf8 OS big 1.小程序端對於18位long類型的接收轉換會出錯,比如171106161246602821—> 171106161246602820。 例如:用戶表的主鍵id存的是18位的biglong類型的,

C語言學習1Microsoft Visual Studio即VC6軟體的安裝及hello world 簡單例子編寫

獲取軟體 安裝軟體 下載後,解壓檔案,執行解壓後根目錄下的VC6CN\SETUP.EXE,開始執行安裝,妥善安裝後,例如我的按照幾乎預設的安裝方式(中間就修改了碟符路徑),安裝在D:\Program Files (x86)\Microso

《javascript 高級程序設計》學習總結1

java 關鍵字 下一個 引用 global 討論 其他瀏覽器 而後 rom    引言:任何語言的核心都必然會描述這門語言的最基本的工作原理,而描述的內容通常都要涉及這門語言的語法、操作符、數據類型、內置功能等用於構建復雜解決方案的基本概念。 今天我就這些基本的概念開始進

C語言複習118.11.7

資料型別、運算子與表示式 整形變數 基本整形:int 【兩個位元組】 短整形:short int,或者short 【兩個位元組,16位】 長整型:long int ,或者long【四個位元組】 無符號整型:unsigned int 【兩個位元組】 //一個位元組8位。 //在32位機子

《機器學習實戰》學習總結1——K-近鄰演算法程式清單2-1

程式碼如下: def classify0(inX, dataSet, labels, k): # inX是用於分類的輸入向量,dataSet是輸入的訓練樣本集,lebels是標籤向量,k是用於選擇最近鄰居的數目 dataSetSiz

C++操作符過載總結operator小結 更新ing

#include <iostream> #include<string.h> #include<stdlib.h> using namespace std; /*操作符過載一個原則是:被操作的資料型別,至少有一個是自定義的型別, * 如果被操作的變數都是基本型別,那麼

Binder學習總結_native1

這幾天一直在看binder的結構,感嘆這樣天才的設計。 現在只研究到binder的native框架,在IPCThreadState以下,真正的driver和資料交換還需要進一步研究。在此記錄一些目前的體會。 1.IInterface的作用 個人感覺,這個IInterface

設計模式C++學習筆記之一Strategy策略模式

無意中,從網上下到一本電子書《24種設計模式介紹與6大設計原則》,很好奇這裡有24種設計模式,印象中GOF寫的《設計模式》(Design Patterns),好像只有23種吧。執行起來一看,還真挺吸引咱的,裡面提到的例子都很有趣。很感謝作者寫出這樣好的例子來,我的目的是把作者

react學習總結1--基礎

react 學習總結–基礎(一) 說明 React 版本 :”15.4.1” react-tap-event-plugin 版本: “^2.0.1” 1.react 是什麼 React 是 Facebook 內部的一個Ja

C#+ArcEngine:向量點轉柵格-1VS2010窗體+程式碼

        /// <summary>        /// 向量點轉柵格        /// </summary>        /// <param name="xjFeatureLayer">向量圖層</param>