首頁 >後端開發 >C#.Net教程 >新手程式設計師應該知道的C語言和C++的差別

新手程式設計師應該知道的C語言和C++的差別

烟雨青岚
烟雨青岚轉載
2020-06-19 13:42:442538瀏覽

新手程式設計師應該知道的C語言和C++的差別

新手程式設計師應該知道的C語言和C 的差別

在剛學會程式設計的時候是不是有很多人以為C語言和C 是一樣的呢?今天我就來詳細的介紹以下C語言和C 有什麼不同,以下讓我們一起來學習。

1、關鍵字 

藍色標註為C語言關鍵字,C 繼承了C語言的所有關鍵字,以下紅色標註為C 中包含但C語言沒有的關鍵字(根據c 98中提出C 包含63個關鍵字)
新手程式設計師應該知道的C語言和C++的差別

#2、原始檔區別
C語言檔案後綴為. c,c 原始檔名後綴為.cpp
如果在建立原始檔時什麼都不給,預設是.cpp
3.回傳值不同
C語言中,如果一個函數沒有指定回傳值類型,預設為int類型,並傳回隨機數,一般為0XCCCCCCCC
在C 中,如果函數沒有傳回值則必須指定為void型,否則編譯不能透過
4、參數清單
在C語言中,函數沒有指定的參數列表時,預設可接收任意多個參數
在C 中,有嚴格的參數類型檢測,沒有參數列表的函數,預設為void,不接收任何參數。
預設參數
預設參數是宣告和定義時函數的參數指定一個預設值。在呼叫函數時,如果沒有指定實參則採用預設值,否則使用指定的實參。
如下程式碼:

#include<iostream>using namespace std;void test(int a = 1)
{    cout << a << endl;
}int main()
{
    test();
    test(10);//输出的结果是1
    return 0;//函数输出结果是10}

而預設參數是分為兩類的,一類是全缺省,一類是半缺省。
首先是全缺省,全缺省參數所有參數都有預設值,如果沒有手動傳參,那麼編譯器會使用預設參數清單中的參數。但這裡值得注意的是,如果傳參的時候只傳了部分參數,那麼該值會被從左到右匹配。
程式碼範例:

#include<iostream>using namespace std;void test(int a = 1,int b = 2, int c = 3)
{    cout << a << " " << b << " " << c << endl;
}int main()
{
    test();//1 2 3
    test(10);//10 2 3
    test(10, 20);//10 20 3
    test(10, 20, 30);//10 20 30
    return 0;
}

半缺省參數程式碼示範:

void test(int a ,int b = 2, int c = 3)
{    cout << a << " " << b << " " << c << endl;
}void test1(int a, int b, int c = 3)
{    cout << a << " " << b << " " << c << endl;
}

其中test函數至少傳一個參數,test1函數至少傳兩個參數,函數才可以正常運作。

注意:  
有預設值的參數必須放在參數清單的最後面。因為傳參是從右向左的。 
預設參數不能同時在函數宣告與定義中出現,只能二者留其一。 
缺省值必須是常數或全域
變數。 
C語言並不支援預設。
5、C 支援函數重載,C語言不支援
在實際開發中,有時候我們需要實作幾個功能類似的函數,只是有些細節不同。例如希望交換兩個變數的值,這兩個變數有多種類型,可以是 int、float、char、bool 等,我們需要透過參數把變數的位址傳入函數內部。在C語言中,程式設計師往往需要分別設計出三個不同名的函數,其函數原型與下面類似:

void swap1(int *a, int *b); //交换 int 变量的值
void swap2(float *a, float *b); //交换 float 变量的值
void swap3(char *a, char *b); //交换 char 变量的值
void swap4(bool *a, bool *b); //交换 bool 变量的值

但在C 中,這完全沒有必要。 C 允許多個函數擁有相同的名字,只要它們的參數清單不同就可以,這就是函數的重載(Function Overloading)。借助重載,一個函數名可以有多種用途。

參數列表又叫參數簽名,包括參數的類型、參數的個數和參數的順序,只要有一個不同就叫做參數列表不同。

#include <iostream>using namespace std;//交换 int 变量的值void Swap(int *a, int *b){int temp = *a;
*a = *b;
*b = temp;
}//交换 float 变量的值void Swap(float *a, float *b){float temp = *a;
*a = *b;
*b = temp;
}//交换 char 变量的值void Swap(char *a, char *b){char temp = *a;
*a = *b;
*b = temp;
}//交换 bool 变量的值void Swap(bool *a, bool *b){char temp = *a;
*a = *b;
*b = temp;
}int main(){//交换 int 变量的值int n1 = 100, n2 = 200;
Swap(&n1, &n2);cout<<n1<<", "<<n2<<endl;//交换 float 变量的值float f1 = 12.5, f2 = 56.93;
Swap(&f1, &f2);cout<<f1<<", "<<f2<<endl;//交换 char 变量的值char c1 = &#39;A&#39;, c2 = &#39;B&#39;;
Swap(&c1, &c2);cout<<c1<<", "<<c2<<endl;//交换 bool 变量的值bool b1 = false, b2 = true;
Swap(&b1, &b2);cout<<b1<<", "<<b2<<endl;return 0;
}

運行結果:

200, 100 
56.93, 12.5 
B, A 
1, 0

重載就是在一個作用範圍內(同一個類別、同一個命名空間等)有多個名稱相同但參數不同的函數。重載的結果是讓一個函數名稱擁有了多種用途,使得命名更加方便(在中大型專案中,給變數、函數、類別起名字是一件令人苦惱的問題),呼叫更加靈活。

在使用重載函數時,同名函數的功能應相同或相近,不要用同一函數名去實現完全不相干的功能,雖然程式也能運行,但可讀性不好,使人覺得莫名其妙。
 注意,參數清單不同包括參數的個數不同、類型不同或順序不同,僅參數名稱不同是不可以的。函數傳回值也不能作為重載的依據。

函數的重載的規則:

(1)函數名稱必須相同。

(2)函數的回傳類型可以相同也可以不相同。

(3)仅仅返回类型不同不足以成为函数的重载。
6、指针和引用
C语言中函数传参方式有两种:传值和传址
以传值方式,在函数调用过程中会生成一份临时变量用形参代替,最终把实参的值传递给新分配的临时形参。它的优点是避免了函数调用的副作用,却无法改变形参的值。如果要改变实参的值,只能通过指针传递。
指针可以解决问题,但是不安全,因此在C++中引入了引用。
引用:引用不是新定义的一个变量,他是原变量的一个别名,编译器不会为引用变量开辟空间,它和他引用的变量共用同一块内存空间。
类型& 变量(对象名)=引用变量
int &num1=num0;
引用特性;:
(1)引用定义时必须初始化
(2)一个变量可以有多个引用
(3)引用一旦绑定一个实体就不能改变为其他变量的引用
//指针和引用的区别
引用不可以为空,但指针可以为空
引用不可以改变指向,对一个对象”至死不渝”;但是指针可以改变指向,而指向其它对象
引用的大小是所指向的变量的大小,因为引用只是一个别名而已;指针是指针本身的大小,4个字节。

7、命名空间
在C++中,变量、函数和类都是大量存在的,这些变量、函数和类的名称将都存在于全局命名空间中,会导致很多冲突,使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或者名字污染,namespace关键字的出现就是解决这种问题。而C语言中没有。
8、输入与输出
cout代表c++的输出流
cin代表c++的输入流
它们都是在头文件“iostream”中定义。
“cout”必须与”在一条语句中可以多次使用“如:cout

#include <iostream>using namespace std;int main()
{int a,b;cout<<"请输入a,b的值"<<endl;cin>>a>>b;cout<<"输出a的值"<<a<<"输出b的值"<<b<<endl;return 0;
}

感谢大家的阅读,大家现在知道C语言和C++的区别了吗?                                  

本文转自:https://blog.csdn.net/qq_39539470/article/details/81268916

推荐教程:《C语言

以上是新手程式設計師應該知道的C語言和C++的差別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除