1. 程式人生 > >Linux C/C++教程(二)-- C++對C的拓展

Linux C/C++教程(二)-- C++對C的拓展

 

目錄

 

一、bool型別關鍵字

二、引用

三、輸入輸出

四、函式引數

五、string類

六、左值


一、bool型別關鍵字

C++在C語言的基礎型別上新增了布林型別(bool),bool可取的值有兩個:true、false,佔用一個位元組。true代表真值,編譯器內部用1來表示;false代表非真值,編譯器內部用0來表示。

#include <iostream>
using namespace std;

int main() {
    bool flag = true;
    std::cout << "bool[true] 值:" << flag << std::endl;
    std::cout << "bool佔用位元組數:" << sizeof(flag) << std::endl;
    flag = 10;
    std::cout << "修改bool[true]值後,值:" << flag << std::endl;
    
    return 0;
}

輸出:

bool[true] 值:1
bool佔用位元組數:1
修改bool[true]值後,值:1

二、引用

在C++中才引入引用型別,它是變數的別名,宣告方法:型別識別符號 &引用名 = 目標變數名,表示式用的&不代表取變數的地址,而是用來表示該變數是引用型別的變數,定義一個引用時,一定要對其進行初始化。

#include <iostream>
using namespace std;

void func(int &arg) {
    arg = 14;
}

int main() {
    int a = 11;
    int c = 12;
    int &b = a;
    b = 13;
    std::cout << "a = " << a << ", b = " << b << std::endl;
    std::cout << "before func c = " << c << std::endl;
    func(c);
    std::cout << "after func c = " << c << std::endl;

    return 0;
}

輸出:

a = 13, b = 13
before func c = 12
after func c = 14

 

三、輸入輸出

C語言中輸入輸出是標準的函式scanf()和printf(),而C++中使用流物件作為輸入輸出,其中cin是標準輸入流物件,即istream類的物件;cout是標準輸出流的物件,即ostream類的物件;cerr是標準錯誤輸出流的物件,也是ostream 類的物件。

四、函式引數

C語言中,函式定義時沒有給定引數或返回型別,預設使用int型別,如:int func()表示接收任意引數的函式;func()表示返回值int的函式。但C++中,所有的識別符號必須顯示宣告型別,否則無法通過編譯;其次C++允許函式設定引數預設值。

#include <stdio.h>

int func1() {
    return 1;
}

func2(void) {
    return 2;
}

int main() {
    int func1_ret = func1(23, 43);
    printf("func1 return[%d]\n", func1_ret);
    int func2_ret = func2();
    printf("func2 return[%d]\n", func2_ret);

    return 0;
}

輸出:

func1 return[1]
func2 return[2]

 

#include <iostream>
using namespace std;

int func1() {

    return 1;
}

int func2(int a, int b = 2) {
    std::cout << "a = " << a << ", b = " << b;

    return 0;
}

int main() {
    int a = 1;
    int b = 3;
    std::cout << "func1 return[" << func1() << "]" << std::endl;
    std::cout << "func2 use default param ";
    int ret1 = func2(a);
    std::cout << std::endl;
    std::cout << "func2 use set param ";
    int ret2 = func2(a, b);
    std::cout << std::endl;

    return 0;
}

輸出:

func1 return[1]
func2 use default param a = 1, b = 2
func2 use set param a = 1, b = 3

五、string類

C語言是靜態弱型別語言,型別在編譯時需要確定,對於string型別,由於它的大小無法在編譯時確定,所以C語言中沒有string型別,通過char *和char []可以定義字串。C++中的string類是一個模板類,位於std名稱空間中,使用string類,標頭檔案必須包含<string>。

#include <iostream>
#include <string>
using namespace std;

int main() {
    std::string mystr("abc");
    std::cout << "mystr:" << mystr << ", size:" << mystr.size() << std::endl;

    return 0;
}

輸出:

mystr:abc, size:3

 

六、左值

左值一定可以作為右值,但右值不一定可以作為左值,C語言中表達式不能作為左值,而C++中只要能建立普通引用的表示式都可以作為左值。

a > b ? a : b = 10; // 三目運算子返回變數本身,可以作左值