注:只是需要注意的和比较容易混淆的点,系统的学习需要看书或者找教程。
1.c++是面向对象的编程,主要有四大特点:封装,继承,多态,抽象。
2.包含输入输出流的方法,属于标准库,用< >,如果是别的头文件用 “ ”
#include <iostream>
#include "xxxx.h"
3.使用命名空间std免去输入输出的前缀,原本应该是std::cout,有了声明就可以直接cout了。
更详细的解释Why is 'using namespace std' used - C++ Forum
using namespace std;
4.返回类型不是void的函数必须要有一个返回值,但是主函数main()里,可以不return,主函数会自动隐式的加入一个return 0
5.标准输出cout,单引号表明单个字符,而双引号则创造一个字符串。和python不一样。<<像屏幕传入字符
cout<<"wacebb"<<endl;
7.endl相当于'\n'。endl在行后面插入一个换行符。
8.对象是类的实例。
9.//单行注释。/*......*/多行注释。
也可以通过#if 0 的方式进行注释 0换成1 就是执行
#endif
cout << "Hello World1!\n";
#if 0
cout << "Hello World2!\n";
#endif
#if 1
cout << "Hello World3!\n";
#endif
10.每一句的结尾必须有;和python不同。
11.创建枚举,需要使用关键字 enum。
enum color { red, green=5, blue };
12.定义变量时,可以先定义,后初始化。不带初始化的定义:带有静态存储持续时间的变量会被隐式初始化为 NULL(所有字节的值都是 0),其他所有变量的初始值是未定义的。
13.运算符 / 取整,% 取余。
14. a++ 就是 a=a+1。
15.条件运算符:condition ?X:Y condition为真 则?为x,否则为y。
16.定义字符串的两种方式:1)string 2)char
string tt = "gdsghsdh";
char t[] = "sdfgashdfasfh";
cout << tt << endl;
cout << t << endl;
17.字符串的面值的实际长度要比他的内容多1,因为系统会在字符串的结尾添加一个‘\0’(空字符)。比如:‘a’和“a”是不一样的,“a”字符串其实多一个\0。
18.&为取地址符号,常用于引用和指针,*常用于指针,*b输出的是地址上的值,b输出的是地址。
#include <iostream>
using namespace std;
int main()
{
int a=10;
int &b=a;//只是相当于给了一个别的名字,也就是引用。
int *c=&a;//定义指针,也可以先int *c 定义一个空指针。
cout <<a<< endl;
cout <<b<< endl;
cout <<&b<< endl;
cout <<c<< endl;//c输出的是地址
cout <<*c<< endl;//*c输出的是地址上的值
*c=100;#给指针赋值,*c赋值,c赋地址,如:c=&b
cout <<c<< endl;
cout <<*c<< endl;
cout <<a<< endl;
return 0;
}
c=&a 是c的值改变了,c指向了a。*c=a,指针c本身没有改变,而是指针指向的地址上的值改变了。
定义空指针时候最好int *p=0 不容易出错。
19.string类型相加时候,不可以直接把字面值直接相加减。
string s= "hello" + "world" //字面值指的就是" "里面的内容
20.字符中的for循环,如果想要改变 string中的值,必须把循环变量定义为引用类型。
string s="sgaggagagsgsg"
for(auto c : s)
xxxxxx
for (auto &c : s )
xxxxx
21.c++中的for循环
for(int a=0;a<10;a++)
xxxx
22.vector表示对象的集合,其中所有对象类型都相同。()用来表示元素个数(10个1这种),{}用来表示具体的值,也可以表示元素个数(10个1)。
//定义
vector<int> v1(10)//10个int的值,而不是一个10.
vector<int> v1{10}//表示vector内容是一个10.
vector<int> v1(10,1)//10个1
vector<int> v1{10,1,4,34}//四个值,分别为10 1 4 34
vector<string> v1(10,'hi')//10个'hi'
vector<string> v1{10,'hi')}//10个'hi'
vector<string> v1('hi','wacebb')//wrong,()用来定义个数的形式,不能放具体的值,
vector<string> v1{'hi'}
vector<string> v1{'hello','wace','bb'}
23.让程序运行完不直接退出,而是按键退出
在最后加system("pause")
24.一个字节8位。也就是8个比特。一个字一般的存储结构是4个字节,也就是32个比特。
25.整体规定输出小数点的位数
cout.self(ios::fixed);
cout.self(ios::showpoint);
cout.precision(2);//保留两位小数
26.单个规定输出小数点位数
cout<<setprecision(4)<<value<<endl;//4位有效小数
27.c++的字符和字符串类型
string a=" ";
char a='';
28.17/5求商 17%5求余
29.常量定义
const int a=100;//程序里不可以修改了
30.强制类型转换
static_cast<double>(vari./const.);//转换为double类型
31.二维数组定义
int a[3][2]={{2,3},{4,5},{6,1}};
32.随机数定义
srand(int)time(0);//随机数种子,此句话是根据系统时间来设计随机数的分布,放主函数中,每次生成的随机数就会不同
a=rand%n;//0~n-1的随机数
33.c++有三种调用:传值调用,传参调用(引用调用),数组调用
//穿值
void getvalue(double var);
//传参
void getcalue(double& var);
//传数组
void getchar(int a[],int size);
34.文件io
#include<fstream>
using namespace std;
ifstream inStream;//定义流
ofstream outStream;
inStream.open("dag.dat");//打开文件
int a,b;
inStream>>a>>b>>endl;//读取文件的内容
outStream.open("333.dat");
outStream<<"a="<<a<<endl;//写入文件
inStream.close();//关闭文件
outStream.close();
35.流作为函数参数,必须传引用
void makee(ifstream& file);
36.读取一个字符
using namespace std;
char binn;
cin.get(binn);
37.for循环有两种,普通的循环和基于范围的循环
for(int i;i<10;i++)//普通的循环
{
...
}
//基于范围的循环
for(datatype varname:array)
{
...
}
for(auto i:a)//数组中的元素循环
{
...
}
38.定义字符串:1.使用char数组 2.使用string
//字符数组
char a[10]="....";
cin.getline(a,10);//读入
//字符串
#incluede<string>
using namespace std;
string a="....";
string a("....");
getline(cin,a);//读入
39.向量:可变长度的数组
#include<vector>
using namespace std;
vector<int> v={0,1,2};//直接定义时初始化
vector<int> a;
a.push_back(0);
a.push_back(1);
....//依次填入数据初始化
40.构造函数
构造函数用来初始化成员变量,有不同类型的构造函数,有带参数的有不带参数的构造函数。
XXX::XXX(int a,int b)
{
...
}
XXX::XXX():a(0),b(1)
{
...
}
调用方法也分为两种,直接调用和显示调用。
//调用两种
//直接调用
XXX XXX(0,0);//调用有参数的构造函数
XXX XXX;//调用无参数的构造函数,不加()
//显式调用
a=XXX(0,0);//调用有参数的构造函数
a=XXX();//调用无参数的构造函数,必须加()