第二章 基本語言
第二節 命名空間簡介,基本輸入輸出精解
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庫:輸入輸出流庫;流就是一個字符序列
-
std::命名空間,標準庫命名空間
-
cout, 發音 c out (console output),是個對象,“標準輸出對象”
c語言叫結構, c++叫類,c語言中定義一個結構變量,在c++中,我們稱爲是定義一個對象 -
<< : 作用被重載了,是一個輸出運算符,第一個參數在左邊,就是cout對象,"很高興和小夥伴一起學習C++!"是第二個參數
-
“\n”: 換行符
-
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(理解成鍵盤), 右側運算對象是變量
-
返回其左側運算對象作爲其計算結果