一、C++简介
C++的特性
1、速度
C++是C的拓展版本,C的部分非常底层,极大的提高了python和java等高级语言无法提供的速度
2、静态类型
由于C++是一种静态类型的编程语言
3、面向对象
C++支持面向对象的程序设计,可以通过创建对象将这些复杂的问题分成较小的集合
4、标准库(标准模板库STL)
可以使用C++包含的标准库进行拓展使用,这些库包含有效的算法,可以在编写项目的时候使用这些算法
大大节省了编程工作,避免浪费时间制造轮子
二、hello实例
#include <iostream>
int main() {
std::cout << "hello kawin" << std::endl;
std::cout << "Hello, World!" << std::endl;
return 0;
}
using namespace std;
加上这个后就不需要std::cout,直接cout
三、cin和cout
1、标准输入设备
cin是标准输入设备,连续从键盘读取数据,>>为提取符
cin的使用
cin >> 变量 (空格作为结束符)
2、标准输出设备
cout是标准输出设备,<<为插入运算符
cout的使用
cou << 输出项 << endl (endl为换行符)
四、注释
多行注释
五、常见数据类型
bool 布尔类型
false 0 true 非零
char 字符类型
保存字符集的一个字符
int 整数类型
int、signed int、unsigned int、short、long、long long
float double 浮点类型
enum 枚举类型
int* 指针类型
char[] 数组类型
double& 引用类型
类
string 字符串类型
std::string str1="hello";
std::string str2="kawin";
std::cout << str1+str2 << std::endl;
auto 关键字
自动推断变量的类型
六、结构体数据类型
结构体的基本概念
结构体属于用户自定义的数据类型,允许用户存储不同的数据类型
语法
struct 结构体名{
结构体成员列表
};
#include "iostream"
#include "string"
using namespace std;
struct student{
string name;
int age;
double score;
}s3;
int main() {
std::cout << "hello kawin" << std::endl;
std::cout << "Hello, World!" << std::endl;
std::string str1="hello";
std::string str2="kawin";
std::cout << str1+str2 << std::endl;
struct student s1;
struct student s2={"张三",20,90.2};
student student;
student.name="zhangsan";
student.age=18;
student.score=90.2;
cout << student.name<<","<<student.age<<","<<student.score << endl;
return 0;
}
七、共用体
共用体(union)是一种数据格式,可以存储不同的数据类型,但只能同时存储其中的一种类型
也就是说,共用体只能存储int、long或double char,结构体可以同时存储int、long和double char
共用体只能存一个,与结构体类似,但是含义不同
#include "iostream"
using namespace std;
struct Product{
char priductName[20];
int type;
union id{
int id_int;
char id_chars[20];
}id_val;
};
int main(){
Product product;
cin >> product.priductName;
cin >> product.type;
if (product.type==1){
cin >> product.id_val.id_int;
cout << product.priductName << ","<< product.type << "," << product.id_val.id_int;
} else{
cin >> product.id_val.id_chars;
cout << product.priductName << ","<< product.type << "," << product.id_val.id_chars;
}
return 0;
}
八、枚举类型
由用户定义的若干枚举常量的集合,常量是不可以修改的
定义格式:
枚举类型的定义格式:
enum<类型名>{<枚举常量表>}
#include "iostream"
using namespace std;
enum color{
red,
green=2,
blue
};
int main(){
color c;
cout << green << " " <<blue << " " <<red<<endl;
c=red;
cout << c << endl;
int a=red;
cout << a << endl;
return 0;
}
九、指针和引用
指针让程序员可以直接对内存进行操作的工具,这样的工具就是一把双刃剑,一面可以实现一些非常优化的程序,另一面会导致一些难以调试的错误。
int *p=&a;
p的指针指向a
取出p指针地址上的值 用*p
*p也叫解引用
void swapint(int *a,int *b){
int temp=*a;
*a=*b;
*b=temp;
};
int main(){
int num=3;
int *p=#
cout << num << "值num" << endl;
cout << "地址的值为" << p << "值为" << * p <<endl;
int a=3;
int b=6;
swapint(&a,&b);
cout << a << " " << b << endl;
int *c=#
int *d=c;
*d=10;
cout << *c << " " << *d << endl;
return 0;
}
引用是C++对C语言的扩充
变量名称是变量附属在内存位置中的标签
引用可以理解为是在内存位置中的第二个标签,因此可以通过原始变量名称或引用来访问变量的内容
引用就是某一变量的一个别名,对引用操作和对变量直接操作完全一样
语法
类型标识符 &引用名=目标变量名;
int changeA(int a){
int &r=a;
r=10;
return a;
}
int main(){
int changa=8;
int res=changeA(changa);
cout << res << endl;
return 0;
}
十、分支语句
#include "iostream"
using namespace std;
int main(){
int a,score,type;
cin >> a;
if (a>100){
cout << "ok" << endl;
}
if (a>0){
cout << "hello" << endl;
}else{
cout << "no" << endl;
}
cin >> score;
if (score>=70){
cout << "优秀" << endl;
}else if(score>=60){
cout << "合格" << endl;
}else{
cout << "不合格" << endl;
}
cin >> type;
switch (type) {
case 1:
cout << "1" << endl;
break;
case 2:
cout << "2" << endl;
break;
case 3:
cout << "3" << endl;
break;
default:
cout << "other" << endl;
}
return 0;
}
十一、循环语句
#include "iostream"
using namespace std;
int main(){
int i =10;
while(i>5){
i--;
cout << i << endl;
}
i=10;
do{
i--;
cout << i << endl;
}while(i>10);
int sum=0;
for (int j = 0; j <= 100; j++) {
sum+=j;
}
cout << sum << endl;
return 0;
}
十二、函数
函数的一般形式
return_type function_name( parameter list){
函数体
}
函数的参数
传值调用,该方法将参数的实际值传给形式参数,修改函数内的形式参数对实际参数没有影响
指针调用,该方法将参数的地址赋值给形式参数,在函数内,该地址用于访问调用中要用到的实际参数,修改形式参数会影响到实际参数
引用调用,该方法把参数的引用赋值给形式参数,在函数内,该引用用于访问调用中要用到的实际参数,修改形式参数会影响到实际参数
调用函数时,如果未传递函数的值,则会用默认值,指定了对应的值,则会忽略默认值,使用传递的值
#include "iostream"
using namespace std;
int sum(int a,int b=20){
return a+b;
}
void sum(int &a,int &b){
return ;
}
int sum1(int a,int b){
return a+b;
}
int main(){
cout << sum(10) << endl;
return 0;
}
十三、函数指针
#include "iostream"
using namespace std;
int sum11(int a,int b){
return a+b;
}
int main(){
int(*p)(int,int);
p=sum11;
cout << (*p)(10,20) << endl;
return 0;
}
十四、函数重载
函数重载即函数名相同,函数形参列表不同的一类函数,称为函数重载
注意函数重载的依据只有形参列表不同
函数的返回类型不同 不可以作为函数重载的依据
参数列表又叫参数标签,包含参数的类型、参数的个数、参数的顺序,只要有一个不同就叫做参数列表不同
int sum11(int a,int b){
return a+b;
}
int sum11(int a,int b,int c){
return a+b;
}
int sum11(int a,int b,int c,int d){
return a+b;
}
int sum11(char a,int b){
return a+b;
}
int sum11(int b,char a){
return a+b;
}