国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【C++ 程序設(shè)計(jì)】第 1 章:C++ 語(yǔ)言簡(jiǎn)介

這篇具有很好參考價(jià)值的文章主要介紹了【C++ 程序設(shè)計(jì)】第 1 章:C++ 語(yǔ)言簡(jiǎn)介。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

一、C++ 語(yǔ)言的發(fā)展簡(jiǎn)史

二、C++ 語(yǔ)言的特點(diǎn)

(1)基本的輸入/輸出

(2)頭文件和命名空間

(3)強(qiáng)制類型轉(zhuǎn)換運(yùn)算符?

(4)函數(shù)參數(shù)的默認(rèn)值?

(5)引用和函數(shù)參數(shù)的傳遞

①?引用的定義

②?引用在函數(shù)中的使用

(6)const 與指針共同使用

(7)內(nèi)聯(lián)函數(shù)?

(8)函數(shù)的重載

(9)指針和動(dòng)態(tài)內(nèi)存分配

(10)用 string 對(duì)象處理字符串?

①?string 對(duì)象的使用

②?string 對(duì)象的聲明

③?string 對(duì)象的操作

三、C++ 語(yǔ)言的程序結(jié)構(gòu)



【C++ 程序設(shè)計(jì)】第 1 章:C++ 語(yǔ)言簡(jiǎn)介


一、C++ 語(yǔ)言的發(fā)展簡(jiǎn)史

? 將程序設(shè)計(jì)語(yǔ)言分為低級(jí)語(yǔ)言、中級(jí)語(yǔ)言和高級(jí)語(yǔ)言

  • 機(jī)器語(yǔ)言匯編語(yǔ)言屬于低級(jí)語(yǔ)言一類,因?yàn)樗鼈兡軌蛑苯硬倏v計(jì)算機(jī)的寄存器和內(nèi)存。
  • 機(jī)器語(yǔ)言是一種依賴于 CPU 的指令系統(tǒng),使用機(jī)器指令的二進(jìn)制代碼編寫程序,能夠直接被計(jì)算機(jī)識(shí)別。
  • 匯編語(yǔ)言使用能夠代表指令的助記符來(lái)編寫程序,可以看作是符號(hào)化了的機(jī)器語(yǔ)言。

? 高級(jí)語(yǔ)言是面向用戶的語(yǔ)言。

  • 很多語(yǔ)言在形式上接近于算術(shù)語(yǔ)言和自然語(yǔ)言,程序員編寫方便。
  • 使用高級(jí)語(yǔ)言編寫的程序易讀且通用性強(qiáng),但大部分不能直接與硬件打交道,也不能直接在計(jì)算機(jī)上運(yùn)行,需要系統(tǒng)軟件的支持,如需要編譯程序及鏈接程序?qū)⒏呒?jí)語(yǔ)言編譯鏈接為機(jī)器指令后才能運(yùn)行。

? C 語(yǔ)言是 C++ 語(yǔ)言的前身,在進(jìn)一步擴(kuò)充和完善 C 語(yǔ)言的基礎(chǔ)上得到了 C++ 語(yǔ)言。



二、C++ 語(yǔ)言的特點(diǎn)

  • 它是 C 語(yǔ)言的繼承,盡量兼容 C 語(yǔ)言,既保持了 C 語(yǔ)言的簡(jiǎn)潔和高效,可以像 C 語(yǔ)言那樣進(jìn)行結(jié)構(gòu)化程序設(shè)計(jì),同時(shí)也增強(qiáng)了 C 語(yǔ)言對(duì)類型的處理。
  • 加入了面向?qū)ο?/strong>的特征,可以進(jìn)行以抽象數(shù)據(jù)類型為特點(diǎn)的基于對(duì)象的程序設(shè)計(jì),還可以進(jìn)行以繼承和多態(tài)為特點(diǎn)的面向?qū)ο蟮某绦蛟O(shè)計(jì)。
與 C 語(yǔ)言相比,C++ 語(yǔ)言的優(yōu)點(diǎn):
  1. 從程序運(yùn)行的穩(wěn)定性來(lái)說(shuō),C++ 語(yǔ)言比 C 語(yǔ)言更安全,它支持過(guò)程化編程、面向?qū)ο缶幊毯头盒途幊?。因?yàn)槟軌蛑С置嫦驅(qū)ο蟮拈_發(fā)方式,所以C++語(yǔ)言的應(yīng)用領(lǐng)域更加廣泛。
  2. C++ 語(yǔ)言可運(yùn)行于多種平臺(tái)上,如 Windows、MAC 操作系統(tǒng)及 UNIX 的多種版本。
  3. C++ 語(yǔ)言中加入了面向?qū)ο?/span>的概念,雖然 C 語(yǔ)言的語(yǔ)法絕大部分都被保留在 C++ 語(yǔ)言中,但 C++ 的程序結(jié)構(gòu)與 C 語(yǔ)言的程序結(jié)構(gòu)存在很大差別。C++ 語(yǔ)言對(duì) C 語(yǔ)言做了很多改進(jìn),C++語(yǔ)言相對(duì)于C語(yǔ)言的最根本的變化是引進(jìn)了類和對(duì)象的概念。

(1)基本的輸入/輸出

功能
C? 語(yǔ)言中使用函數(shù)
C++? 語(yǔ)言中提供類
C++? 類中對(duì)象
運(yùn)算符
鍵盤輸入
scanf()
輸入流類? istream
cin
>>
屏幕輸出
printf()
輸出流類? ostream
cout
<<
  • 在 C++ 中,可以使用流提取運(yùn)算符 “>>” 從標(biāo)準(zhǔn)輸入設(shè)備鍵盤取得數(shù)據(jù)。例如,語(yǔ)句 “cin>>x;” 從鍵盤獲取輸入數(shù)據(jù)并賦給變量 x 。使用?cin?可以獲得多個(gè)來(lái)自鍵盤輸入值。
  • cout?是一個(gè)標(biāo)準(zhǔn)輸出對(duì)象,使用流插入運(yùn)算符 “<<” 向輸出設(shè)備屏幕輸出信息。
/* 示例:基本的輸入輸出 */
#include<iostream>
#include<string>
using namespace std;
int main( )
{
  int oneInt1,oneInt2;
  char strArray[20];
  string str;
  double oneDouble;
  char oneChar='a';
  cout<<"輸入兩個(gè)整型值,一個(gè)字符,一個(gè)字符串和一個(gè)浮點(diǎn)值,";
  cout<<"以空格、Tab鍵或〈Enter〉鍵分隔:"<<endl;
  cin>>oneInt1>>oneInt2>>oneChar>>strArray>>oneDouble;
  str=strArray;
  cout<<"輸入的數(shù)據(jù)是:"<<endl;                         // endl 的作用是換行
  cout<<"字符串是:\t\t"<<str<<endl                    // \t 是制表符 Tab
      <<"兩個(gè)整型值分別是:\t"<<oneInt1<<"和\t"<<oneInt2<<endl
      <<"字符是:\t\t"<<oneChar<<"\n"                  // \n 是換行符,與 endl 效果相同
      <<"浮點(diǎn)值是:\t\t"<<oneDouble<<endl;
  return 0;
}


/* 假定,程序運(yùn)行時(shí)輸入:/*
10 20 g abc 25.5

/* 屏幕上會(huì)輸出如下的運(yùn)行結(jié)果:/*
輸入的數(shù)據(jù)是:
字符串是: abc
兩個(gè)整型值分別是: 10 和 20
字符是: g
浮點(diǎn)值是: 25.5

(2)頭文件和命名空間

? iostream? 是 C++ 的 標(biāo)準(zhǔn)輸入/輸出流 。
  • 當(dāng)在程序中使用 cin 或 cout 時(shí),必須在程序的最前面包含這個(gè)流。
  • 如果還要使用其他的內(nèi)容,那么需要包含其他的頭文件。
  • 每條 #include 指令僅可以包含一個(gè)頭文件,如果需要包含多個(gè)頭文件,則需要使用多條#include 指令。 【嵌入指令】
? 在 C++ 中,頭文件不再以 “.h” 結(jié)尾,以 “.h” 結(jié)尾的頭文件是 C 語(yǔ)言中常用的頭文件。
常用的頭文件有以下一些
  • 標(biāo)準(zhǔn)輸入輸出流:<iostream>
  • 標(biāo)準(zhǔn)文件流:<fstream>
  • 標(biāo)準(zhǔn)字符串處理函數(shù):<string>
  • 標(biāo)準(zhǔn)數(shù)學(xué)函數(shù):<cmath>
當(dāng)使用 尖括號(hào) 時(shí),C++ 編譯器將 首先在 C++ 系統(tǒng)設(shè)定的目錄中尋找要包含的文件 ,如果沒(méi)有找到,再到指令中指定的目錄中去查找。 采用雙引號(hào)時(shí),C++ 編譯器在用戶當(dāng)前目錄下或指令中指定的目錄下尋找要包含的文件。
  • 例如,要包含e:\myprog目錄下的頭文件 ex1.h,相應(yīng)的語(yǔ)句如下:
#include "e:\myprog\ex1.h"
C++ 中為了避免名字定義沖突,特別引入了 “命名空間” 的定義,即? namespace? 。命名空間的作用是為了消除同名引起的歧義。 using namespace std;
定義一個(gè)命名空間的語(yǔ)法格式如下:
namespace 命名空間名
{
? ? ? 命名空間內(nèi)的各種聲明(函數(shù)聲明、類聲明、……)
}

(3)強(qiáng)制類型轉(zhuǎn)換運(yùn)算符?

【C++ 程序設(shè)計(jì)】第 1 章:C++ 語(yǔ)言簡(jiǎn)介

static_cast 用于將一種數(shù)據(jù)類型轉(zhuǎn)換成另一種數(shù)據(jù)類型,使用格式如下:

【格式】static_cast<類型名>(表達(dá)式)

【功能】 其功能是把表達(dá)式轉(zhuǎn)換為類型名所指定的類型
【注意】 static_cast 也可以省略
【示例】
/* 示例(程序 1-1 ):基本的輸入輸出 */
#include<iostream>
#include<string>
using namespace std;
int main( )
{
  int oneInt1,oneInt2;
  char strArray[20];
  string str;
  double oneDouble;
  char oneChar='a';
  cout<<"輸入兩個(gè)整型值,一個(gè)字符,一個(gè)字符串和一個(gè)浮點(diǎn)值,";
  cout<<"以空格、Tab鍵或〈Enter〉鍵分隔:"<<endl;
  cin>>oneInt1>>oneInt2>>oneChar>>strArray>>oneDouble;
  str=strArray;
  cout<<"輸入的數(shù)據(jù)是:"<<endl;                         // endl 的作用是換行
  cout<<"字符串是:\t\t"<<str<<endl                    // \t 是制表符 Tab
      <<"兩個(gè)整型值分別是:\t"<<oneInt1<<"和\t"<<oneInt2<<endl
      <<"字符是:\t\t"<<oneChar<<"\n"                  // \n 是換行符,與 endl 效果相同
      <<"浮點(diǎn)值是:\t\t"<<oneDouble<<endl;
  return 0;
}


/* 假定,程序運(yùn)行時(shí)輸入:/*
10 20 g abc 25.5

/* 屏幕上會(huì)輸出如下的運(yùn)行結(jié)果:/*
輸入的數(shù)據(jù)是:
字符串是: abc
兩個(gè)整型值分別是: 10 和 20
字符是: g
浮點(diǎn)值是: 25.5
/* 以程序 1-1 中聲明的變量為例,下面 4 種寫法都是正確的:*/
oneInt2=static_cast<int>(oneDouble);   //強(qiáng)制類型轉(zhuǎn)換
oneInt2=int(oneDouble);                //強(qiáng)制類型轉(zhuǎn)換運(yùn)算符的新形式
oneInt2=(int)oneDouble;                //強(qiáng)制類型轉(zhuǎn)換運(yùn)算符的舊有形式
oneInt2=oneDouble;                     //自動(dòng)類型轉(zhuǎn)換

(4)函數(shù)參數(shù)的默認(rèn)值?

  • C++ 語(yǔ)言規(guī)定,提供默認(rèn)值時(shí)必須按從右至左的順序提供,即有默認(rèn)值的形參必須在形參列表的最后。
  • 如果有某個(gè)形參沒(méi)有默認(rèn)值,則它左側(cè)的所有形參都不能有默認(rèn)值。
  • 調(diào)用函數(shù)時(shí),主調(diào)函數(shù)的實(shí)參與被調(diào)函數(shù)的形參按從左至右的順序進(jìn)行匹配對(duì)應(yīng)。

【示例】?函數(shù)調(diào)用示例(一)

// 假設(shè)給出如下的函數(shù)聲明:
void func(int a,int b=2,int c=3);

// 則下列函數(shù)調(diào)用中哪些是正確的?請(qǐng)解釋原因。
func(1,22,333);
func( );
func(10,20);
func(5, ,9);

【分析】

  • func(1,22,333);??是正確的,調(diào)用時(shí)給出了所有實(shí)參,且參數(shù)的類型也是匹配的。
  • func( );? ? ? ? ? ? ? ?錯(cuò)誤的,聲明中參數(shù) a 沒(méi)有默認(rèn)值,調(diào)用時(shí)必須給出實(shí)參值。
  • func(10,20);? ? ? ?正確的,實(shí)參表中的兩個(gè)值 10 和 20 分別對(duì)應(yīng)于函數(shù)聲明中的形參 a 和 b ,參數(shù) c 使用默認(rèn)值 3。
  • func(5, ,9);? ? ? ? ?錯(cuò)誤的,調(diào)用時(shí)給出的實(shí)參應(yīng)該是連續(xù)排列的。

(5)引用和函數(shù)參數(shù)的傳遞

①?引用的定義

【定義】?引用相當(dāng)于給變量起了一個(gè)別名。

  • 變量對(duì)應(yīng)于某個(gè)內(nèi)存地址,如果給某個(gè)變量起了別名(不需要給它另開辟內(nèi)存單元),相當(dāng)于變量和這個(gè)引用都對(duì)應(yīng)到同一地址。
  • 程序中使用哪個(gè)名字都是允許的。

【格式】類型名 & 引用名 = 同類型的某變量名;

【示例】

int oneInt;
int &aname=oneInt;  // 聲明引用
/* 示例:引用和函數(shù)參數(shù)的傳遞 */
#include<iostream>
using namespace std;
int main()
{
  int oneInt=1;
  int &ref=oneInt;                                 //ref 是 oneInt 的引用,ref 等價(jià)于 oneInt
  const int &refc=oneInt;                          //定義常引用
  ref=2;                                           //修改 ref 也即修改了 oneInt
  cout<<"oneInt="<<oneInt<<","<<"ref="<<ref<<endl; //輸出 oneInt=2, ref=2
  cout<<"refc="<<refc<<endl;                       //輸出 refc=2
  oneInt=3;                                        //修改 oneInt 也即修改了 ref
  cout<<"ref="<<ref<<endl;                         //輸出 ref=3
  cout<<"refc="<<refc<<endl;                       //輸出 refc=3
  int & ref2=ref;                                  //ref2 和 ref 都是 oneInt 的引用
  cout<<"ref2="<<ref2<<endl                        //輸出 ref2=3
  //refc=5;                                        //錯(cuò)誤,不能使用常引用對(duì)所引用的變量進(jìn)行修改
  return 0;
}

②?引用在函數(shù)中的使用

? 在程序中不僅能定義變量的引用,還可以將引用用在函數(shù)中。
  • 引用既可以作為函數(shù)的參數(shù)使用,也可以作為函數(shù)的返回值使用。
? 在 C++?中,函數(shù)調(diào)用時(shí)參數(shù)的傳遞有兩種方式: 傳值傳引用 。
  • 傳值:實(shí)際上是傳遞對(duì)象的。
  • 傳引用:是傳遞對(duì)象的首地址值。

? 如果函數(shù)的形參不是引用,那么調(diào)用時(shí)實(shí)參傳遞給形參通常采用的是傳值的方式,即將實(shí)參的值拷貝給形參。

  • 在函數(shù)執(zhí)行過(guò)程中,都是對(duì)這個(gè)拷貝進(jìn)行操作的,函數(shù)執(zhí)行完畢返回后,形參的值并不拷貝回實(shí)參,也就是說(shuō)函數(shù)內(nèi)部對(duì)形參的改變不會(huì)影響到函數(shù)外實(shí)參的值。
? 如果函數(shù)的形參是引用,則調(diào)用時(shí)實(shí)參傳遞給形參采用的是 傳引用 的方式。
  • 函數(shù)調(diào)用時(shí),實(shí)參對(duì)象名傳遞給形參對(duì)象名,形參對(duì)象名就成為實(shí)參對(duì)象名的別名,即形參是對(duì)應(yīng)實(shí)參的引用,它們是等價(jià)的,代表同一個(gè)對(duì)象,也可以看作是將實(shí)參的地址傳遞給了形參。
  • 在函數(shù)內(nèi)部對(duì)形參的操作,都是對(duì)這個(gè)地址的內(nèi)容進(jìn)行的,相當(dāng)于對(duì)實(shí)參的值進(jìn)行了操作。所以當(dāng)函數(shù)執(zhí)行完畢返回后,實(shí)參的變化被保留下來(lái)。
#include<iostream>
using namespace std;

void SwapValue(int a,int b)
{ 
  int tmp;
  tmp=a;
  a=b;
  b=tmp;
  cout<<"在SwapVa1ue( )函數(shù)中:\t\ta="<<a<<",b="<<b<<endl;
}

void SwapRef(int & a,int & b)   // a、b值互換
{ 
  int tmp;
  tmp=a;
  a=b;
  b=tmp;
  cout<<"在SwapRef()函數(shù)中:\t\ta="<<a<<",b="<<b<<endl;
}

int main()
{ 
  int a=10,b=20;
  cout<<"數(shù)據(jù)交換前:\t\ta="<<a<<",b="<<b<<endl<<endl;
  SwapValue(a,b);
  cout<<"調(diào)用SwapVal()后:\t\ta="<<a<<",b="<<b<<endl<<endl;
  a=10;
  b=20;
  SwapRef(a,b);
  cout<<"調(diào)用SwapRef()后:\t\ta="<<a<<",b="<<b<<endl<<endl;
  return 0;
}

?【C++ 程序設(shè)計(jì)】第 1 章:C++ 語(yǔ)言簡(jiǎn)介

#include<iostream>
using namespace std;

int oneX=10;
int oneY=20;
int & refValue(int & x)
{
  return x;
}

int main()
{
  refValue(oneX)=30;          //返回值是引用,可以作為左值使用
  cout<<"oneX="<<oneX<<endl;  //輸出 oneX=30
  refValue(oneY)=40;          //返回值是引用的函數(shù)調(diào)用表達(dá)式,可以作為左值使用
  cout<<"oneY="<<oneY<<endl;  //輸出 oneY=40
  return 0;
}

?【C++ 程序設(shè)計(jì)】第 1 章:C++ 語(yǔ)言簡(jiǎn)介


(6)const 與指針共同使用

const 修飾指針變量時(shí),基本含義如下:
  1. 如果唯一的 const 位于符號(hào) * 的左側(cè),表示指針?biāo)笖?shù)據(jù)是常量,數(shù)據(jù)不能通過(guò)本指針改變,但可以通過(guò)其他方式進(jìn)行修改;指針本身是變量,可以指向其他的內(nèi)存單元。
  2. 如果唯一的 const 位于符號(hào) * 的右側(cè),表示指針本身是常量,不能讓該指針指向其他內(nèi)存地址;指針?biāo)傅臄?shù)據(jù)可以通過(guò)本指針進(jìn)行修改。
  3. 在符號(hào) * 的左右各有一個(gè) const 時(shí),表示指針和指針?biāo)笖?shù)據(jù)都是常量,既不能讓指針指向其他地址,也不能通過(guò)指針修改所指向的內(nèi)容。?
可以簡(jiǎn)單地記住 const 的修飾規(guī)則:
  • const 修飾其左側(cè)的內(nèi)容
  • 如果 const 是本行的第一個(gè)標(biāo)識(shí)符,則它修飾其右側(cè)的內(nèi)容
#include<iostream>
using namespace std;
int main( )
{
  int a1=3;                  //普通變量,a1=5 是正確的
  const int a2=a1;           //數(shù)據(jù)是常量的,a2=5 是錯(cuò)誤的
  int * a3=&a1;              //普通指針指向普通變量,*a3=6 是正確的
  const int * a4=&a1;        //數(shù)據(jù)是常量的,普通指針 *a4=5 是錯(cuò)誤的
  int * const a5=&a1;        //指針是常量的,不能修改指針,但 *a5=10 是正確的
  int const * const a6=&a1;  //數(shù)據(jù)是常量的,指針也是常量的
  const int * const a7=&a1;  //數(shù)據(jù)是常量的,指針也是常量的
  return 0;
}

(7)內(nèi)聯(lián)函數(shù)?

? 為了避免這種頻繁的函數(shù)調(diào)用與返回,C++ 語(yǔ)言引入了內(nèi)聯(lián)函數(shù)的概念。
  • 使用內(nèi)聯(lián)函數(shù),編譯器在編譯時(shí)并不生成函數(shù)調(diào)用,而是將程序中出現(xiàn)的每一個(gè)內(nèi)聯(lián)函數(shù)的調(diào)用表達(dá)式直接用該內(nèi)聯(lián)函數(shù)的函數(shù)體進(jìn)行替換,就像整個(gè)函數(shù)體在調(diào)用處被重寫了一遍一樣。
  • 很顯然,使用內(nèi)聯(lián)函數(shù)會(huì)使最終可執(zhí)行程序的體積增大。
  • 這是以空間消耗節(jié)省時(shí)間開銷。
? 內(nèi)聯(lián)函數(shù)應(yīng)該定義在前,調(diào)用在后,定義時(shí)只需在函數(shù)頭返回值類型的前面加上 關(guān)鍵字 inline
? 內(nèi)聯(lián)函數(shù)主要 應(yīng)用于代碼量少的函數(shù),頻繁調(diào)用
? 如果函數(shù)體中有 循環(huán)語(yǔ)句switch語(yǔ)句 則通常 不定義為內(nèi)聯(lián)函數(shù)

(8)函數(shù)的重載

函數(shù)重載:是指在程序的同一范圍內(nèi)聲明幾個(gè)功能類似的同名函數(shù)?

實(shí)現(xiàn)函數(shù)的重載必須滿足下列條件之一:
  • 參數(shù)表中對(duì)應(yīng)的參數(shù)類型不同
  • 參數(shù)表中參數(shù)個(gè)數(shù)不同
  1. 如果函數(shù)參數(shù)表中不同類型參數(shù)的次序不同,也符合上面所說(shuō)的條件。
  2. 要注意的是,返回值類型不能用來(lái)區(qū)分函數(shù),也就是說(shuō),如果兩個(gè)函數(shù)的名字和參數(shù)表都是一樣的,僅僅是返回值類型不同,則這兩個(gè)函數(shù)不是重載的,編譯器認(rèn)為它們是重復(fù)定義,編譯時(shí)會(huì)報(bào)錯(cuò)。
【注意】 所謂函數(shù)重載,是指在程序的同一范圍內(nèi)聲明幾個(gè)功能類似的同名函數(shù)。
【示例】
  • 例如,在同一個(gè)類中聲明 3 個(gè)求兩者中較大值的同名函數(shù),如例 1-2 所示。
  • 使用同一個(gè)函數(shù)名作為功能一樣的函數(shù)的函數(shù)名,這也符合人們的習(xí)慣。
  • 針對(duì)同名的函數(shù),分別為其編寫函數(shù)體,即可實(shí)現(xiàn)各自的功能。
/* 示例(例 1-2 )*/
#include<iostream>
using namespace std;

int biggerInt(int x,int y)               //返回兩個(gè) int 型數(shù)中的較大者
{
  if(x>y) return x;
  else return y;
}

float biggerFloat(float x,float y)       //返回兩個(gè) float 型數(shù)中的較大者
{
  if(x>y) return x;
  else return y;
}

double biggerDouble(double x,double y)   //返回兩個(gè) double 型數(shù)中的較大者
{ 
  if(x>y) return x;
  else return y;
}

void main()
{
  int a=5,b=8;
  cout<<biggerInt(a,b)<<endl;
}
#include<iostream>
using namespace std;

int abs(int n)
{
  return(n<0?-n:n);
}

float abs(float f)
{
  if(f<0) f=-f;
  return f;
}

double abs(double d)
{
  if(d<0) return -d;
  return d;
}

void main()
{
  int a=-6;
  cout<<abs(a)<<endl;
}
【注意】編譯階段,程序還沒(méi)有執(zhí)行,所以并不知道返回值是什么,更加確定不了它的類型,所以編譯器并不能根據(jù)返回值確定該調(diào)用哪個(gè)函數(shù)。
【示例】錯(cuò)誤的重載函數(shù)
float add(int, float);    //將整數(shù)和浮點(diǎn)數(shù)相加,返回浮點(diǎn)數(shù)
int add(int, float);      //將整數(shù)和浮點(diǎn)數(shù)相加,返回整數(shù),錯(cuò)誤!
【注意】 采用引用參數(shù)也不能區(qū)分函數(shù)
【示例】錯(cuò)誤的重載函數(shù)
void print(double);
void print(double&); //錯(cuò)誤!
【示例】調(diào)用重載函數(shù)
int xI=10,yI=20;
float xF=30,yF=40;
double xD=50,yD=60;
cout<<bigger(xI,yI)<<endl;
cout<<bigger(xF,yF)<<endl;
cout<<bigger(xD,yD)<<endl;

【分析】根據(jù)函數(shù)重載的規(guī)則:

  • bigger(xI,yI)?調(diào)用的是?int bigger(int,int) 函數(shù)
  • bigger(x,yF)?調(diào)用的是?float bigger(float,float)?函數(shù)
  • bigger(xD,yD)?調(diào)用的是?double bigger(double,double)?函數(shù)

【示例】調(diào)用函數(shù)時(shí)進(jìn)行必要的類型提升

double bigger(double x,double y)
{
  if(x>y) return x;
  else return y;
}
int xI=10,yI=20;
float xF=30,yF=40;
double xD=50,yD=60;
cout<<bigger(xI,yF)<<endl;

【示例】調(diào)用重載函數(shù)時(shí)的二義性

  • 若定義了重載函數(shù)?Sum( ),如下所示:
int Sum(int a,int b,int c=0);
int Sum(int a,int b);
  • 則以下函數(shù)調(diào)用語(yǔ)句將導(dǎo)致編譯錯(cuò)誤:
Sum(1,2);
【分析】因?yàn)榫幾g器不知道是應(yīng)該以 (1 , 2 0)? 作為參數(shù)調(diào)用第一個(gè) Sum( )? 函數(shù),還是以 (1,2)? 作為參數(shù)調(diào)用第二個(gè)? Sum( )? 函數(shù),即 產(chǎn)生二義性 。在設(shè)計(jì)程序時(shí),應(yīng)該避免這種情況的發(fā)生。

(9)指針和動(dòng)態(tài)內(nèi)存分配

  1. 指針變量中保存的是一個(gè)地址,有時(shí)也稱指針指向一個(gè)地址。
  2. 數(shù)組的長(zhǎng)度是聲明數(shù)組時(shí)指定的,在整個(gè)程序運(yùn)行過(guò)程中通常是不變化的。C++ 語(yǔ)言不允許定義元素個(gè)數(shù)不確定的數(shù)組。
  3. 在 C++ 語(yǔ)言中,使用 new 運(yùn)算符實(shí)現(xiàn)動(dòng)態(tài)內(nèi)存分配。?
  4. 使用?new?運(yùn)算符動(dòng)態(tài)申請(qǐng)的內(nèi)存空間,需要在使用完畢釋放。C++?提供了?delete?運(yùn)算符,用來(lái)釋放動(dòng)態(tài)分配的內(nèi)存空間。
  • delete?運(yùn)算符的基本用法如下: delete 指針;
  • delete?運(yùn)算符后面的指針必須是指向動(dòng)態(tài)分配的內(nèi)存空間的,否則運(yùn)行時(shí)很可能會(huì)出錯(cuò)

【示例】指針變量中保存的是一個(gè)地址,有時(shí)也稱指針指向一個(gè)地址,若有以下的定義:?

int a=100,*p=&a;

【分析】

  • 指針 p 指向整型變量 a,p 中保存 a 的地址,而不是值 100 。
  • p 指向的地址中的值是 100。
  • 地址與地址中的值不要混淆。

【示例】?數(shù)組的長(zhǎng)度是聲明數(shù)組時(shí)指定的,在整個(gè)程序運(yùn)行過(guò)程中通常是不變化的。C++語(yǔ)言不允許定義元素個(gè)數(shù)不確定的數(shù)組。例如:

int n;
int a[n];  //在有些編譯環(huán)境下,這種定義是不允許的,因?yàn)?n 未知
【示例】 在 C++ 語(yǔ)言中,使用 new 運(yùn)算符實(shí)現(xiàn)動(dòng)態(tài)內(nèi)存分配。
  • 例如,可以寫如下的語(yǔ)句:
p=new T;

其中,T 是任意類型名,p 是類型為 T* 的指針。

  • 這樣的語(yǔ)句會(huì)動(dòng)態(tài)分配出一片大小為 sizeof(T) 字節(jié)的內(nèi)存空間,并且將該內(nèi)存空間的起始地址賦值給指針p。例如:
int * p;
p=new int;
*p=5;
第 2 行語(yǔ)句動(dòng)態(tài)分配了有 4 個(gè)字節(jié)大小的內(nèi)存空間,p 指向這個(gè)空間的首地址,之后通過(guò)指針 p 可以讀寫該內(nèi)存空間。第 3 行語(yǔ)句是向這個(gè)空間中存入數(shù)值 5 。
  • 使用 new 運(yùn)算符還可以動(dòng)態(tài)分配一個(gè)任意大小的數(shù)組:
p=new T[N];
其中,T 是任意類型名,p 是類型為 T* 的指針,N 代表數(shù)組 “元素個(gè)數(shù)” ,可以是任何的值為正整數(shù)的表達(dá)式。數(shù)組中元素的類型是 T 類型。這條語(yǔ)句動(dòng)態(tài)分配了 N*sizeof(T) 個(gè)字節(jié)的內(nèi)存空間,指針 p 指向這段空間的首地址。

【示例】動(dòng)態(tài)分配整型數(shù)組

int * pArray;               //指向數(shù)組的指針
int i = 5;
pArray = new int [i*20];    //分配了 100 個(gè)元素的整型數(shù)組
pArray[0] = 20;             //數(shù)組的第一個(gè)值
pArray [99] = 30;           //數(shù)組的最后一個(gè)值

【分析】

  • 數(shù)組的下標(biāo)從?0?開始,含?n?個(gè)元素的數(shù)組的下標(biāo)范圍是從?0?n-1。
  • 超出這個(gè)范圍的值都會(huì)導(dǎo)致數(shù)組下標(biāo)越界。例如,上述代碼中定義的數(shù)組?pArray?,當(dāng)使用pArray[-1]?或是 pArray[100]?時(shí),下標(biāo)會(huì)越界。
  • 不過(guò)在編譯時(shí),對(duì)于數(shù)組越界的錯(cuò)誤并不會(huì)提示,而顯示編譯正確。運(yùn)行時(shí),會(huì)得到意料之外的結(jié)果。

【示例】?使用 new?運(yùn)算符動(dòng)態(tài)申請(qǐng)的內(nèi)存空間,需要在使用完畢釋放。C++提供了delete運(yùn)算符,用來(lái)釋放動(dòng)態(tài)分配的內(nèi)存空間delete運(yùn)算符的基本用法如下:

  • delete 指針;
delete?運(yùn)算符后面的指針必須是指向動(dòng)態(tài)分配的內(nèi)存空間的,否則運(yùn)行時(shí)很可能會(huì)出錯(cuò), 釋放指針時(shí)出錯(cuò)示例如下:
int oneInt=6;
int * p=&ontInt;
cout<<*p<<endl;
delete p;          //出錯(cuò),p 是引用,不是動(dòng)態(tài)分配的
int * q=new int;
*q=8;
cout<<*q<<endl;
delete q;          //正確,q 指向動(dòng)態(tài)分配的空間

【分析】?

  • 指針?p?和?q?都指向一個(gè)整型變量,但指針?p?指向的空間并不是使用?new?運(yùn)算符分配的,所以不能使用?delete?釋放
  • 而指針?q?指向的空間是使用?new?分配的,所以使用完畢,通過(guò)?delete?進(jìn)行釋放
  • 如果是使用?new?運(yùn)算符動(dòng)態(tài)分配了一個(gè)數(shù)組,那么釋放該數(shù)組時(shí),語(yǔ)句為:delete [ ] 指針;
  • 例如,釋放上述代碼中分配的數(shù)組空間的語(yǔ)句是?delete [ ] pArray;”?

(10)用 string 對(duì)象處理字符串?

  • C++ 標(biāo)準(zhǔn)模板庫(kù)中提供了 string 數(shù)據(jù)類型,專門用于處理字符串。
  • string是一個(gè)類,這個(gè)類型的變量稱為 “string對(duì)象”? 。

①?string 對(duì)象的使用

要在程序中使用 string 對(duì)象,必須在程序中包含頭文件 string ,即在程序的最前面,要加上如下語(yǔ)句:
#include<string>

②?string 對(duì)象的聲明

聲明一個(gè) string 對(duì)象,與聲明普通變量是類似的,格式如下:
string 變量名;?

【示例】?

  • 聲明?string?對(duì)象?str1?,值為
  • 聲明?string?對(duì)象?city?,并使用字符串常量進(jìn)行初始化
  • 聲明?string?對(duì)象?str2?,并使用字符串變量進(jìn)行初始化
string str1;                    //聲明 string 對(duì)象 str1,值為空
string city="Beijing";          //聲明 string 對(duì)象 city,并使用字符串常量進(jìn)行初始化
string str2=city;               //聲明 string 對(duì)象 str2,并使用字符串變量進(jìn)行初始化
cout<<"str1="<<str1<<"."<<endl;
cout<<city<<","<<str2<<endl;

【示例】使用字符數(shù)組對(duì)?string?變量進(jìn)行初始化

char name[ ]="C++程序";
string s1=name;

【示例】聲明一個(gè)?string?對(duì)象數(shù)組,即數(shù)組中每個(gè)元素都是字符串

string citys[ ]={"Beijing","Shanghai","Tianjin","Chongqing"};
cout<<citys[1]<<endl;                       //輸出 Shanghai,數(shù)組下標(biāo)從 0 開始
cout<<sizeof(citys)/sizeof(string)<<endl;   //輸出數(shù)組元素個(gè)數(shù)

【分析】

  • 最后一行語(yǔ)句將輸出數(shù)組元素個(gè)數(shù)。
  • citys?是?string?對(duì)象數(shù)組
  • sizeof(citys)?是整個(gè)數(shù)組占用的空間大小
  • sizeof(string) 是每個(gè)?string?對(duì)象的大小
  • 所以?sizeof(citys) / sizeof(string)?表示的是數(shù)組元素個(gè)數(shù)

③?string 對(duì)象的操作

【說(shuō)明】 string?對(duì)象可以使用? cin? 和? cout? 進(jìn)行輸入和輸出,實(shí)際上,到目前為止,已經(jīng)使用了很多這樣的示例。
【示例】
string s1,s2;
cin>>s1>>s2;
cout<<s1<<","<<s2<<endl;
【說(shuō)明】
  • string對(duì)象之間可以互相賦值,也可以用字符串常量和字符數(shù)組的名字對(duì)string對(duì)象進(jìn)行賦值。
  • 賦值時(shí)不需要考慮被賦值的對(duì)象是否有足夠的空間來(lái)存儲(chǔ)字符串。
【示例】
string s1,s2="OK";
s1="China";
s2=s1;          // s1 和 s2 表示的字符串不等長(zhǎng),賦值后 s2 的內(nèi)容和 s1 相同
cout<<"s1="<<s1<<"s2="<<s2<<endl;
#include<iostream>
#include<string>
using namespace std;
void main()
{
  string s1, s2; 
  s1="C++程序";
  s2=s1;
  string s3;
  cout<<"s3= "<<s3<<endl;     //輸出 s3=
  s3=s1+s2;
  cout<<s1+s2<<endl;          //輸出 C++程序C++程序
  cout<<"s3="<<s3<<endl;      //輸出 s3=C++程序C++程序
  s3+="de";
  cout<<"s3="<<s3<<endl;      //輸出 s3=C++程序C++程序de
  bool b=s1<s3;               //b 為 true
  cout<<"bool="<<b<<endl;     //輸出 bool=1
  char c=s1[2];               //c 為 '+',下標(biāo)從 0 開始計(jì)算
  cout<<"c="<<c<<endl;        //輸出 c=+
  cout<<s1[2]<<endl;          //輸出 +
  char arrstr[]="Hello";
  s3=s1+arrstr; 
  cout<<s3<<endl;             //輸出 C++程序Hello
}

?【C++ 程序設(shè)計(jì)】第 1 章:C++ 語(yǔ)言簡(jiǎn)介

#include<iostream>
#include<string>
using namespace std;
int main()
{
  string str;      //未初始化,空串
  if(str.empty())
      cout<<"str is NULL."<<",length="<<str.length()<<endl;
  else
      cout<<"str is not NULL."<<endl;
  str=str.append("abcdefg");
  cout<<"str is "<<str<<",size="<<str.size()<<endl;
  const char *p=str.c_str();
  cout<<"p="<<p<<endl;
  cout<<"find:"<<str.find("de",0)<<endl;   //查找成功,3
  cout<<"find:"<<str.find("de",4)<<endl;   //查找失敗
  string str1=str.insert(4,"123");
  cout<<str1<<endl;
  return 0;
}

?【C++ 程序設(shè)計(jì)】第 1 章:C++ 語(yǔ)言簡(jiǎn)介文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-469892.html



三、C++ 語(yǔ)言的程序結(jié)構(gòu)

  1. C++ 程序以?.cpp?作為文件擴(kuò)展名,文件中包含若干個(gè)類和若干個(gè)函數(shù)。
  2. 程序中必須有且僅有一個(gè)主函數(shù) main( ),這是程序執(zhí)行的總?cè)肟凇?/span>
  3. 主函數(shù)也稱為主程序。
  4. 程序從主函數(shù) main( ) 的開始處執(zhí)行,主函數(shù)可以在任何地方出現(xiàn)按照其控制結(jié)構(gòu),一直執(zhí)行到結(jié)束。
  5. 主函數(shù)中可以調(diào)用程序中定義的其他函數(shù),但其他函數(shù)不能調(diào)用主函數(shù)。
  6. 主函數(shù)僅是系統(tǒng)為執(zhí)行程序時(shí)所調(diào)用的。
程序的結(jié)束通常是遇到了以下兩種情形之一:
  • 在主函數(shù)中遇到 return 語(yǔ)句
  • 執(zhí)行到主函數(shù)最后面的括號(hào) }
C++ 程序中,仍沿用 C 語(yǔ)言的注釋風(fēng)格,即注釋有以下兩種形式:
  • 多行注釋:從?/* 開始,到 */ 結(jié)束,這之間的所有內(nèi)容都視作注釋
  • 單行注釋:從?// 直到行尾,都是注釋

到了這里,關(guān)于【C++ 程序設(shè)計(jì)】第 1 章:C++ 語(yǔ)言簡(jiǎn)介的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【高級(jí)程序設(shè)計(jì)語(yǔ)言C++】異常與智能指針

    【高級(jí)程序設(shè)計(jì)語(yǔ)言C++】異常與智能指針

    當(dāng)我們編寫程序時(shí),可能會(huì)遇到各種錯(cuò)誤和異常情況,例如除以零、訪問(wèn)無(wú)效的內(nèi)存地址等。為了能夠處理這些異常情況,C++提供了異常處理機(jī)制。 異常是程序在運(yùn)行時(shí)發(fā)生的意外或錯(cuò)誤情況。當(dāng)異常發(fā)生時(shí),程序會(huì)中斷當(dāng)前的執(zhí)行流程,并跳轉(zhuǎn)到異常處理代碼塊。異常處理

    2024年02月10日
    瀏覽(32)
  • C++語(yǔ)言程序設(shè)計(jì)第五版 - 鄭莉(第六章課后習(xí)題)

    C++語(yǔ)言程序設(shè)計(jì)第五版 - 鄭莉(第六章課后習(xí)題)

    6-20 實(shí)現(xiàn)一個(gè)名為 SimpleCircle 的簡(jiǎn)單圓類。其數(shù)據(jù)成員 int* itsRadius 為一個(gè)指向其半徑值的指針,存放其半徑值。設(shè)計(jì)對(duì)數(shù)據(jù)成員的各種操作,給出這個(gè)類的完整實(shí)現(xiàn)并測(cè)試這個(gè)類。 6-21 編寫一個(gè)函數(shù),統(tǒng)計(jì)一條英文句子中字母的個(gè)數(shù),在主程序中實(shí)現(xiàn)輸入輸出。 6-22 編寫函數(shù)

    2023年04月25日
    瀏覽(21)
  • Python 程序設(shè)計(jì)入門(025)—— 使用 os 模塊操作文件與目錄

    Python 內(nèi)置了 os 模塊及其子模塊 os.path,用于對(duì)目錄或文件進(jìn)行操作。在使用 os 模塊及其子模塊 os.path 模塊時(shí),需要使用 import 導(dǎo)入該模塊,才能使用它們提供的函數(shù)或方法。 1、os 模塊提供的操作目錄的函數(shù) os 模塊提供的操作目錄的函數(shù)如下表所示: 函數(shù) 說(shuō)明 getcwd() 返回當(dāng)

    2024年02月11日
    瀏覽(86)
  • AIGC行業(yè)周刊【2023-0625】【第六期】萬(wàn)字長(zhǎng)文:LLM - 大語(yǔ)言模型發(fā)展簡(jiǎn)史

    點(diǎn)擊加入-【智子紀(jì)元-AIGC】技術(shù)交流群 朱嘯虎和傅盛都沒(méi)錯(cuò) | 42章經(jīng) 關(guān)于王慧文病情和光年之外,我所了解的情況 AI開源路在何方丨2023智源大會(huì)精彩回顧 對(duì)話竹間智能簡(jiǎn)仁賢:做大模型不能唱高調(diào),企業(yè)需要低成本、平民化的模型產(chǎn)品 孫正義手握5萬(wàn)億,帶領(lǐng)軟銀全力撲向

    2024年02月15日
    瀏覽(20)
  • 《抽象代數(shù)極簡(jiǎn)教程》全書目錄 / By 禪與計(jì)算機(jī)程序設(shè)計(jì)藝術(shù)&ChatGPT

    —— By 禪與計(jì)算機(jī)程序設(shè)計(jì)藝術(shù)ChatGPT 1.1 集合的基本概念 1.2 二元運(yùn)算 1.3 代數(shù)系統(tǒng)的定義 1.4 例子:整數(shù)集合的代數(shù)系統(tǒng) 2.1 群的定義 2.2 群的基本性質(zhì) 2.3 群的例子 2.4 子群 2.5 商群 2.6 同態(tài)與同構(gòu) 3.1 環(huán)的定義 3.2 環(huán)的基本性質(zhì) 3.3 環(huán)的例子 3.4 理想 3.5 商環(huán) 3.6 同態(tài)與同構(gòu) 4

    2024年02月03日
    瀏覽(108)
  • 【軟件設(shè)計(jì)師07】程序設(shè)計(jì)語(yǔ)言與語(yǔ)言處理程序基礎(chǔ)

    【軟件設(shè)計(jì)師07】程序設(shè)計(jì)語(yǔ)言與語(yǔ)言處理程序基礎(chǔ)

    編譯與解釋、文法、正規(guī)式、有限自動(dòng)機(jī)、表達(dá)式、傳值與傳址、多中程序語(yǔ)言特點(diǎn) (逐漸降低考察比例,很少考察) 概念 文法類型 語(yǔ)法推導(dǎo)樹 有限自動(dòng)機(jī) 與正規(guī)式(重點(diǎn)) 常見問(wèn)題:給一個(gè)串比如01、10、001等,看圖中起點(diǎn)到終點(diǎn)能否連起來(lái)得到這樣的串 正規(guī)式 是有限自

    2023年04月08日
    瀏覽(20)
  • 基于微信在線教育視頻學(xué)習(xí)小程序畢業(yè)設(shè)計(jì)作品成品(11)視頻詳情和目錄

    博主介紹: 《Vue.js入門與商城開發(fā)實(shí)戰(zhàn)》《微信小程序商城開發(fā)》圖書作者,CSDN博客專家,在線教育專家,CSDN鉆石講師;專注大學(xué)生畢業(yè)設(shè)計(jì)教育和輔導(dǎo)。 所有項(xiàng)目都配有從入門到精通的基礎(chǔ)知識(shí)視頻課程,免費(fèi) 項(xiàng)目配有對(duì)應(yīng)開發(fā)文檔、開題報(bào)告、任務(wù)書、PPT、論文模版

    2024年02月08日
    瀏覽(92)
  • C++《面向?qū)ο蟪绦蛟O(shè)計(jì)課程設(shè)計(jì)》

    《面向?qū)ο蟪绦蛟O(shè)計(jì)課程設(shè)計(jì)》課程說(shuō)明 適用專業(yè):計(jì)算機(jī)科學(xué)與技術(shù) 課程周數(shù):5周 一、根據(jù)計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)人才培養(yǎng)方案制訂。 (一)課程設(shè)計(jì)性質(zhì) 課程設(shè)計(jì)是學(xué)生對(duì)課程所學(xué)知識(shí)的綜合運(yùn)用,它與課堂聽講、上機(jī)實(shí)驗(yàn)、課外練習(xí)、自學(xué)研究相輔相成,構(gòu)成一個(gè)

    2024年02月08日
    瀏覽(24)
  • Java語(yǔ)言程序設(shè)計(jì)課程設(shè)計(jì)

    Java語(yǔ)言程序設(shè)計(jì)課程設(shè)計(jì) 一、 java語(yǔ)言程序設(shè)計(jì)課程設(shè)計(jì)要求: (1)java語(yǔ)言課程設(shè)計(jì)軟件設(shè)計(jì)要求 1.題目不做嚴(yán)格限定,可自行選擇題目來(lái)完成。 2.模塊化程序設(shè)計(jì) 3.鋸齒型書寫格式 4.必須上機(jī)調(diào)試通過(guò) (2)撰寫課程設(shè)計(jì)報(bào)告,內(nèi)容包括: 1.課程設(shè)計(jì)題目; 2.需求分析;

    2024年02月08日
    瀏覽(24)
  • 譚浩強(qiáng)C語(yǔ)言程序設(shè)計(jì)習(xí)題-循環(huán)結(jié)構(gòu)程序設(shè)計(jì)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包