c語言入門到c++使用高手:深入學習C++之基本語言(二)

第二章 基本語言

第二節 命名空間簡介,基本輸入輸出精解

1. 命名空間概念簡介

  • 場景:如有一個大型項目,分給多人寫代碼,會出現同名實體(同名的函數,同名的變量,同名的類)

  • 命名空間:就是爲了防止名字衝突引入的機制,系統中可以定義多個命名空間,每個命名空間都有自己的名字,不可以同名
    可以把這個命名空間看成一個作用域,在這個命名空間裏定義函數,跟另外一個命名空間裏定義的函數數即使同名,也互不影響

  • 命名空間定義

namespace 命名空間變量名{
    ...
}
  • 命名空間的定義可以不連續,甚至可以寫在多個文件中,如果之前沒有定義對應的命名空間,(namespace 命名空間名{})相當於定義對應的命名空間,如果之前已經定義過對應的命名空間,相當於在對應命名空間中添加新的成員函數

  • 外界如何訪問對應命名空間中的成員函數呢?訪問格式:命名空間::實體名 , 這個"::"叫做作用域運算符

#include <iostream>
#include <cstdio>

namespace A {
    void radius() {
        printf("A寫的radius!\n");
    }
}
//定義對應的命名空間
namespace B {
    void radius() {
        printf("B寫的radius!\n");
    }
}
//相當於已經打開了已經存在的命名空間併爲其添加新的成員
namespace B {
    void radius2() {
        printf("B寫的radius2!\n");
    }
}


int main() {
    A::radius();
    B::radius2();
    std::cout << "Hello, World!" << std::endl;
    return 0;
}

整個文件

  • pro1.h
//
// Created by felaim on 2020/5/12.
//

#ifndef LESSION_PART_TWO_PRO1_H
#define LESSION_PART_TWO_PRO1_H
namespace B {
    void radius();

    void radius2();
}
#endif //LESSION_PART_TWO_PRO1_H

  • pro1.cpp
//
// Created by felaim on 2020/5/12.
//
#include <cstdio>
#include "pro1.h"
//定義對應的命名空間
namespace B {
    void radius() {
        printf("B寫的radius!\n");
    }
}
//相當於已經打開了已經存在的命名空間併爲其添加新的成員
namespace B {
    void radius2() {
        printf("B寫的radius2!\n");
    }
}

  • main.cpp
#include <iostream>
#include <cstdio>
#include "pro1.h"
//使用命名空間B,後面可以省略B::,
using namespace B;
namespace A {
    void radius() {
        printf("A寫的radius!\n");
    }
}

int main() {
    A::radius();
    radius2();
    std::cout << "Hello, World!" << std::endl;
    return 0;
}
  • CMakeLists.txt
cmake_minimum_required(VERSION 3.14)
project(lession_part_two)

set(CMAKE_CXX_STANDARD 11)
include_directories(./include/)
add_executable(lession_part_two main.cpp ./source/pro1.cpp)

2. 基本輸入輸出cin, cout精解

標準輸出cout

  • #include , iostream庫:輸入輸出流庫;流就是一個字符序列
  1. std::命名空間,標準庫命名空間

  2. cout, 發音 c out (console output),是個對象,“標準輸出對象”
    c語言叫結構, c++叫類,c語言中定義一個結構變量,在c++中,我們稱爲是定義一個對象

  3. << : 作用被重載了,是一個輸出運算符,第一個參數在左邊,就是cout對象,"很高興和小夥伴一起學習C++!"是第二個參數

  4. “\n”: 換行符

  5. std::endl: 一般放在std::cout的末尾,(std::endl是個模板函數名, 相當於函數指針?) 作用:

a)  輸出換行符
b) 強制刷新輸出緩衝區,緩衝區中所有的數據都被系統清除了, 
c) 輸出緩衝區就是一段內存,cout輸出的時候實際是往輸出緩衝區輸出內容:
輸出緩衝區滿了,
程序執行到mian的return語句,
調用了std::endl,能夠強制刷新輸出緩衝區(把緩衝區的內容往屏幕上輸出)
當系統不太繁忙的時候,系統也會查看緩衝區內容,發現新內容也會輸出到屏幕上
#include <iostream>
#include <cstdio>


struct student {
    char name[100];
    int number;
};

namespace std {
    int itest;
    struct student cout1;
}

int main() {
    std::cout << "很高興和小夥伴一起學習C++!\n";
    int x = 3;
    std::cout << x << " 的平方是: " << x * x << "\n";
    x++;
    std::cout << x << " 的平方是: " << x * x << "\n";
    x++;
    std::cout << x << " 的平方是: " << x * x << std::endl;
    return 0;
}
  • ostream &std::cout.operator<<() //定義, 返回的是一個寫定值的cout對象
int main() {
    int x = 3;
    //在一個表達式中避免多次的使用(改變一個變量的值)
    std::cout << x-- << x-- << std::endl;// 23
    
    return 0;
}

標準輸入cin

  • cin也是iostream相關對象, 叫標準輸入

  • >>: 運算符重載, 是一個"輸入運算符", 左側運算對象是cin(理解成鍵盤), 右側運算對象是變量

  • 返回其左側運算對象作爲其計算結果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章