1. 程式人生 > >namespace、struct、enum、union、string(day01)

namespace、struct、enum、union、string(day01)

mic str 歷史 數組 hello 科學 練習 line 空字符串

一 C++概述
1 C++歷史背景
1)C++的江湖地位
 jave C C++ C# python

2)C++之父:Bjarne Stroustrup(1950--)
1979,Cpre,為C語言增加類的機制
1983,Bjarne發布了全新的編程語言C with Class
1985,CFront1.0《The C++ programming Language》

3)C++發展過程
1987,GNU C++
1990,Borland C++(BC編譯器)
1992,Microsoft C++(VC)
1998,ISO C++98
2003,對C++98進行修訂,C++03
2011,ISO C++11
/C++0x 2014, ISO對C++標準做了部分擴展,C++14 *2017,C++17(未知) 2 應用領域 1)遊戲 2)科學計算 3)網絡通信(ACE) 4)操作系統和設備驅動 5)其它... 3 C和C++ 1)都是編譯型語言 2)都是強類型語言,但是C++更強 3)C++兼容C語言,但是去除了C中不好的特性 4)C++增加了很多了好的特性,比C語言更適合大型軟件的開發 二 第一個C++程序 1 編譯方式 1)gcc xx.cpp -lstdc++ 2)g++ xx.cpp //good 2 文件擴展名 1)xx.cpp//good 2)xx.cc 3)xx.cxx 4)xx.C 3 頭文件
//包含標準C++中所有和I/O有關的類型、對象、函數 #include <iostream> //在C++中依然可以使用C庫的函數,但需要寫上對應的有文件,C++中提供了一套和C庫對應的頭文件 #include <stdio.h> ==> #include <cstdio> #include <stdlib.h> ==> #include <cstdlib> #include <string.h> ==> #include <cstring> ... 4 標準輸入和輸出 1)用cin對象表示標準輸入//
類似scanf eg: //從標準輸入設備獲取一個整形數放到變量a中 int a; scanf("%d",&a); cin >> a; ">>" 稱為提取運算符 eg: int a; double d; scanf("%d%lf",&a,&d); cin >> a >> d; 2)用cout對象表示標準輸出//類似printf eg: int a = 100; printf("%d\n",a); cout << a << endl; "<<":稱為插入運算符 註:endl表示換行,和“\n”等價 eg: int a = 10; double d = 3.14; printf("%d,%lf\n",a,d); cout << a << , << d << endl; 5 "std::"表示標準名字空間 三 名字空間(namespace) 1 名字空間的作用 1)避免名字沖突 2)劃分邏輯單元 2 定義名字空間 namespace 名字空間名{ 名字空間成員1; 名字空間成員2; ... } 名字空間成員可以是全局變量、全局函數、類型、名字空間。 eg: namespace ns{ int i;//全局變量 void func(void){...}//全局函數 struct Stduent{...};//結構體類型 namespace ns2{...} } 3 名字空間成員使用 1)通過作用域限定運算符“::” 名字空間名::要訪問的成員; eg: namespace ns{ int i;//全局變量 } int main(void){ i=100;//error,名字空間裏面成員不能直接訪問 ns::i=100;//ok,通過作用域限定符可以訪問 } 2)名字空間指令 using namespace 名字空間名; 在該條指令以後的代碼,指定名字空間中的成員都可見,訪問其中的成員可以省略作用域限定。 3)名字空間聲明 using 名字空間名::名字空間成員; 將名字空間中的某個成員引入當前作用域,在該作用域訪問這個成員如果訪問局部變量一樣,可以省略作用域限定. eg: namespace ns{ int i1=10; int i2=20; } int main(void){ using namespace ns;//名字空間指令 cout << i1 << endl;//ok cout << i2 << endl;//ok --------------------------- using ns::i1;//名字空間聲明 cout << i1 << endl;//ok cout << i2 << endl;//error } 4 無名名字空間 不屬於任何名字空間的標識符,將被編譯器劃分到無名名字空間中,顯式訪問裏面的成員:"::成員"5 嵌套名字空間//了解 eg: namespace china{ namespace beijing{ namespace chaoyang{ char* name; } } } china::beijing::chaoyang::name = "老王"; 四 C++結構體、聯合體和枚舉 1 C++結構體 1)定義結構體類型變量時可以省略“struct”關鍵字 eg: struct A{...};//聲明 A a;//定義結構體類型的變量a 2)在C++結構體裏面可以直接定義函數,稱為成員函數,而且在成員函數中可以直接訪問成員變量; eg: struct A{ int a;//成員變量 void foo(void){...}//成員函數 }; 2 聯合體 //了解 1)定義聯合體類型變量時可以省略“union”關鍵字 2)支持匿名聯合 3 枚舉 1)定義枚舉類型變量時可以省略“enum”關鍵字 2)C++枚舉是一種獨立的數據類型,而C中枚舉本質就是整型數。 eg: enum COLOR{RED,GREEN,BLUE}; /*enum*/COLOR c; c = 100;//C:ok C++:error 五 C++的字符串 1 C++兼容C中字符串表示方式 1)字面值常量字符串 "hello" 2)字符指針 char* 3)字符數組 char[] eg: const char* p = "hello"; //strcpy(p,"world");//段錯誤 p = "world";//ok char arr[5]={0}; strcpy(arr,"jiangguliang");//越界使用內存危險 cout << arr << endl; //arr-->char* const arr //arr = "hello";//error 2 C++中增加string類型,專門表示字符串 1)定義字符串 string s;//定義空字符串 string s1 = "hello";//定義同時初始化 string s2("hello"); string s3 = string("hello"); 註:s1 s2 s3三種寫法完全等價 2)字符串的基本操作 --》字符串拷貝"=" --》字符串的連接"+" "+=" --》字符串比較: > < == != --》獲取字符串中某個字符:[] --》獲取字符串的長度:size()/length() --》將string轉換成char*: c_str() eg: string s1 = "hello"; s1 = "abcdefg";//拷貝字符串 cout << s1 << endl;//abcdefg ------------------------------ string s1 = "hello"; s1 += " world";//把world連接到s1後面 cout << s1 << endl;//"hello world" ------------------------------ string s1 = "hello"; string s2 = s1 + " world"; cout << s2 << endl;//"hello world" ------------------------------ string s1 = "hello"; string s2 = "world"; if(s1 > s2){//字符串比較 cout << "s1>s2" << endl; } else{ cout << "s1<s2" << endl; } ------------------------------ string s1 = "hello"; //獲取字符串中某個字符 cout << s1[0] << endl;//h s1[0] = H; cout << s1 << endl;//Hello ------------------------------ string s1 = "hello world!"; cout << s1.size() << endl;//12 cout << s1.length() << end;//12 ----------------------------- string s1 = "hello"; char* s2 = s1;//error char* s2 = s1.c_str();//ok ===================== 練習:使用string表示字符串,從鍵盤讀取一個字符串,統計裏面包含字母A/a的個數. string s; cin >> s;//註:會被空白字符截斷 getline(cin,s);//它可以讀走空格

namespace、struct、enum、union、string(day01)