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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值