天天看點

C++:C、C++差別

1. 輸入、輸出

C語言:

頭檔案:#include <stdio.h>
輸入:scanf
輸出:printf
           

C++:

頭檔案:#include <iostream>
		using namespace std;  //打開std命名空間
輸入:cin  //預定義好的輸入流對象名,與提取運算符 >> 配合使用,從鍵盤上提取
輸出:cout //預定義好的輸出流對象名,與流插入運算符 << 配合使用, 換行使用endl
           

cin與scanf的差別:

scanf是格式化輸入函數,cin是标準化輸入流對象,scanf對類型有要求,cin不區分類型
例:	int a;
	char ch;
	scanf("%d %c",&a,&ch); 
	cin>>a>>ch;
注意:cin不允許cin>>a,ch,必須每一個變量前都要有提取符>>
           

2. 常量的差別

C語言:

#define PI 3.14  //宏常量
#define MAX 10
enum {LEN = 10}; //枚舉常量
           

C++:

define與const差別:

define 定義的是宏常量
	1. 宏常量在預編譯的時候進行替換
	2. 宏常量不配置設定空間
	3. 宏常量并沒有類型

const 修飾的是常變量
	1. 常變量在編譯時進行替換
	2. 常變量配置設定空間
	3. 常變量會有類型的檢查
           

const在編譯時進行替換例子:

int main()
{
	const int a = 10;
	int b = 0;
	int *p = (int*)&a;
	*p = 100;
	b = a;
	cout << " a = " << a << " b = " << b << " *p = " << *p << endl;
}
           
C++:C、C++差別
C++:C、C++差別

常變量與宏有一拼,常變量在編譯階段進行替換,宏在預編譯時替換

3. 引用

&的使用:
  1. 數字之間:位運算與 : 1 & 0 --> 0
  2. 變量名前取位址:&a
  3. 類型與辨別符中間:引用: int &c = a;

引用&:就是别名/外号, 一旦引用初始化為某個變量,就可以使用引用名稱直接使用該變量,就是給該變量起了個别名

引用的特點:

  1. 沒有空引用
  2. 定義引用時必須進行初始化
  3. 沒有二級引用

引用的使用:

C語言使用指針交換a,b

void Swap_c(int *pa, int *pb)
{
	int tmp = *pa;
	*pa = *pb;
	*pb = tmp;
}
           

C++使用引用交換a,b

void Swap_cpp(int &a, int &b)//在函數中對a,b的交換,就是對實參的交換
{
	int tmp = a;
	a = b;
	b = tmp;
}
           

C中使用指針間接交換了a,b;而C++使用引用直接操縱實參進行了交換

4. 函數重載

C語言通過函數名來區分函數,重載函數在c中編譯是通不過的

C++支援函數的重載,可以用來作為重載函數的依據有:

  1. 參數類型不同
  2. 參數個數不同

注意:函數的傳回值不能區分重載函數,因為編譯器不能通過函數傳回值來識别調用哪一個函數,現有的編譯器無法達到對傳回類型的識别

5. 預設形參

C++函數的形參可以帶預設值,參數清單的預設值從右向左依次給,不能跳着給

調用函數時,實參是從左向右依次給,不能跳着給

void fun(int a, int b, int c = 0, int d = 0)
{
}
int main()
{
	fun(12,23);//給實際參數的時候是從左向右依次給,不能跳着給
	//fun(12, ,33);錯誤
}
           

6. 堆區開辟空間

C語言:

int *p = (int *)malloc(sizeof(int));
free(p);
           

C++:

int *s = new int;//開辟一個整型空間
int *p = new int(10);//開辟并初始化
delete s; 
           

開辟數組空間:

int n;
cin>>n;
int *p = (int*)malloc(sizeof(int)*n);//C語言
int *s = new int[n];//C++
int *t = new int[n](100);//開辟并初始化,C99标準
free(p); p = NULL;
delete []s;
delete []t;

           

繼續閱讀