C++學習筆記(適合初學者和想要快速瞭解C++語法的人)

程序基本格式

#include<iostream>
int main() {
std::cout<<"HelloWorld"<<std::endl;
return0;
}

 

 

 

輸入輸出

//ostream(cout)輸出流:往控制檯寫數據;istream(cin)輸入流:從控制檯讀數據
std::cin>>a;
std::cin>>b; //std::cin>>a>>b;
sum= a + b;
std::cout<<sum<<endl;

 

 

類和對象

 

 

class Person {
private:
int _pid;
string _name;
public:
Person();
~Person();
void setpid(int pid);
int getpid();
void setname(string name);
string getname();
};
Person::Person(){
cout<<"構造函數"<<endl;
}
Person::~Person(){
cout<<"析構函數"<<endl;
}
voidPerson::setpid(int pid) {
this->_pid= pid;
}
intPerson::getpid() {
returnthis->_pid;
}
voidPerson::setname(string name) {
this->_name= name;
}
stringPerson::getname() {
returnthis->_name;
}
intmain() {
/*
Person per;
per.setpid(1);
per.setname("tom");
intpid = per.getpid();
stringname = per.getname();
*/
Person *per = newPerson(); //new時調用構造函數
per->setpid(2);
per->setname("kitty");
intpid = per->getpid();
stringname = per->getname();
cout<<pid<<","<<name<<","<<age<<endl;
deleteper; //delete時調用析構函數
system("pause");
return0;
}

 

基本數據類型
布爾型bool;字符型char;短整型short;整型int;長整型long;單精度浮點型float;雙精度浮點型double;擴展精度浮點型long double;無符號型unsigned

字面常量

 

 

//整型字面常量
int i =100; //十進制
int j =024; //八進制
int k = 0x16; //十六進制
long l =12345l; //l/L表示長整型字面常量
unsigned int ui =100u; //無符號
//浮點數
floatf = 3.14f;
longdouble ld = 3.1415l;
float fl =1.38e5; //1.38乘以10的5次方
//布爾字面量
boolflag = true;
flag= false;
//字符字面量
charc = 'A';
//轉義字符
stringstr = "Hello\tWorld!";
cout<<str.c_str()<<endl;
//字符串字面常量
stringst = "www.baidu.com";

 

變量

 

int age =20; //變量類型是int,變量名稱是age,變量的值是20
//變量的命名
stringcustomer_name;
stringcustomerName;
string_name;
//初始化
int kid =1; //拷貝初始化
intpid(2); //直接初始化
//初始化規則
cout<<out<<endl; //函數體外,默認初始化0
cout<<in<<endl; //error函數體內,不初始化會報錯
//變量的定義和聲明
int x =100; //定義
extern inty; //聲明

 

const

1)在一個變量前面使用const關鍵字,表示該變量不可被修改,即該變量是一個常量
2)使用常量的好處是:一程序的可讀性強,二程序更容易維護
3)全局作用域中的非const變量的作用域是全局的
4)const默認爲文件的局部變量,可在前面添加extern指定爲全局變量

 

 

extern const float pi = 3.14;

 

引用

1)引用就是變量的別名,通常用在函數的形參列表中
2)定義引用的語法格式是在變量前面加"&"符號

 

 

int k =100; //k
int &r =k; //r是k的別名,必須賦初值
voidswap1(int a,int b) {
inttemp;
temp= a;
a= b;
b= temp;
}
voidswap2(int &i,int &j) {
inttemp;
temp= i;
i= j;
j= temp;
}
//值傳遞
inta = 1,b = 2;
swap1(a,b);
cout<<a<<","<<b<<endl;
----------------
1,2
----------------
//引用傳遞
swap2(a,b);
cout<<a<<","<<b<<endl;
----------------
2,1
----------------


類型定義
1)typedef用來定義類型的同義詞,例如:typedef int myint;myint age;
2)typedef的語法格式是typedef 數據類型 標識符
3)使用typedef目的:強調使用類型的目的;簡化複雜的數據類型表示

 

 

 

枚舉

1)enum關鍵字來定義具有關聯性的枚舉常量
2)語法格式是enum 可選的枚舉類型名稱{枚舉成員列表}
3)枚舉成員是常量,默認從0開始,也可以賦值

enum direction {
UP,
DOWN,
LEFT = 100,
RIGHT
};


命名空間

 

//包含命名空間,省去用域訪問符號去訪問成員
using namespace MyNS1;
//聲明命名空間
namespace MyNS1 {
int a;
int b;
void f1();
void f2();
}
//使用域訪問符號"::"來訪問命名空間中的成員
void MyNS1::f1() {
cout<<MyNS1::a<<","<<MyNS1::b<<endl;
}


string

 

//字符串的定義和初始化
strings1; //默認構造函數,s1爲空
string s2(s1); //將s2初始化爲s1的一個副本
string s3("HelloWorld"); //將s3初始化爲"hello"
strings4(2,'a'); //將s4初始化爲兩個a字符的字符串
//字符串的讀寫
strings;
cin>>s; //遇到空格終止
//循環讀入若干個字符串(不含空格),遇到bye退出
stringstr;
while(cin>>str) {
cout<<str<<endl;
if(str == "bye") break;
}
//getline:循環讀入若干字符行(含空格),遇到bye退出
string line;
while (getline(cin,line)) {
cout<<line<<endl;
if (line == "bye") break;
}
/*
字符串的操作
*/
//判斷字符串是否爲空
boolresult = s.empty();
//獲得字符串長度
intsize = s.size();
//獲得某個索引位置上的字符
charc = s[2];
//字符串的連接
strings1 = "Hello";
strings2 = "World";
strings = s1 + s2;
//字符串相等的比較
strings1 = "hello";
strings2 = "hello";
cout<<(s1==s2)<<endl;


vector

 

vector <int> vec;
vector <int>::iterator pos;
//向量末尾添加一個元素
vec.push_back(10);
//刪除向量最後一個元素
vec.pop_back();
//遍歷
for(int i = 0; i < vec.size();i++) {
cout<<vec.at(i)<<endl; //v.at(i)相當於v[i]
}
pos= vec.begin();
while(pos != vec.end()) {
cout<<*pos++<<endl;
}
for (pos = vec.begin(); pos != vec.end(); ++pos)
{
cout <<*pos<<endl;
}
//刪除
vec.erase(vec.begin());
vec.erase(vec.begin()+ 1, vec.begin() + 3);
//把值插入向量中指定位置
vec.insert(vec.begin()+1,70);
//返回向量中起始和末尾元素
vec.front();
vec.back();


指針:指向變量地址的變量

 

int i = 100;
int *ip =&i; //*解引用 &取地址
//不指向任何對象
1)
int*p = 0;
2)
int*q = NULL; //#define NULL 0
3)
constint x = 0;
int*px = x;
inty = 0;
int *py =y; //error y不是常量
//void*類型
int i = 100;
void* p = &i;
double d = 3.14;
void* q = &d;
//void*返回值
void* test4() {
int i = 99;
return &i;
}
//void*形參
classPer {
};
voidtest5(void* v) {
}
//引用和指針的區別
inti = 99;
intj = 199;
int &q =i; //引用:必須初始化,並且之後不可改變
int*p; //指針:可以不初始化,並且可以改變
p= &i;
p= &j;
int i = 1,j = 2;
int *pi = &i,*pj = &j;
pi = pj;
//這裏修改了pi的值,使得pi也指向了j
int &ri = i;
int &rj = j;
ri = rj;
//這裏修改了ri引用的對象i的值,而並非引用本身
//賦值後,這兩個引用還是分別指向原來的關聯對象
//二級指針
inti = 100;
int*p = &i;
int**q = &p;
//指針操作數組
const unsigned array_size = 5;
int arr[array_size] = {1,2,3,4,5};
//數組名稱默認是數組的首地址
int *p =arr; //等價int *p = &arr[0];
for (int i = 0; i < array_size; i++) {
cout<<*(p++)<<endl;
}
*(pa++); //數組位置+1
(*pa)++; //此數+1
//指向const對象的指針
constdouble pi1 = 3.14;
double*ppi;
//const指針,指針本身不能被修改
inti = 100;
int*const pi2 = &i;
//指向const對象的const指針,二者均不能被修改
constdouble pi3 = 3.14;
constdouble *const_ppi = &pi3;


new和delete

 

string *s = new string("Hello World");
cout<<*s<<endl;
deletes; //懸垂指針
cout<<s<<endl; //0x5a1310
s =NULL; //指向爲空
cout<<s<<endl; //0
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章