转义字符
![](https://img-blog.csdnimg.cn/img_convert/f2116f26d22ecf3626292cbcb63c6da7.png)
![](https://img-blog.csdnimg.cn/img_convert/25923d64f8db17fcd9af350097999eea.png)
字符串
![](https://img-blog.csdnimg.cn/img_convert/50b833a8e215d976f389da52ccf2cbae.png)
bool类型
![](https://img-blog.csdnimg.cn/img_convert/f2211f7248b8af17446d4462f988b5f6.png)
取模运算
两个小数不能做取模运算
三目运算符
(表达式1?表达式2:表达式3);
可对预算结果进行赋值 例:(表达式1?表达式2:表达式3)=100;
switch语句:
每一个分支后要加break表示退出当前分支,否则会继续执行下一个语句;
若剩下分支归一类则可以写为default:
![](https://img-blog.csdnimg.cn/img_convert/251c182b97f3aaff648387700ee56afe.png)
随机数猜测
![](https://img-blog.csdnimg.cn/img_convert/480a9d5e9ba3fb9a4c9d6f6e61f43412.png)
do...while语句
总结:与while循环区别在于,do...while先执行一次循环语句,再判断循环条件
乘法口诀表
![](https://img-blog.csdnimg.cn/img_convert/12cae05dd47b07577666d1227d7805cb.png)
const修饰指针
(1)常量指针:const int *p=&a;
特点:指针的指向(p=&b)可以修改,指针指向的值(*p=20)不可以修改
(2)指针常量:int * const p=&a;
特点:指针的指向不可以修改,指针指向的值可以修改
(3)const修饰指针和常量:const int *const p=&a;
结构体中const使用
![](https://img-blog.csdnimg.cn/img_convert/339276c815f8f0cb828a808f44d5df7d.png)
const放在传址前面防止数据被误操作
封装
封装的意义:(1)将属性和行为作为一个整体,表现生活中的事物(2)将属性和行为加以权限控制
内存分区模型(1和2在程序运行前 3和4在程序运行后)
代码区:存放函数体的二进制代码,由操作系统进行管理的
![](https://img-blog.csdnimg.cn/img_convert/fcbe367714d5f95a8cb71bcd6c3683ca.png)
全局区:存放全局变量和静态变量(static)以及常量(字符串常量和const修饰的全局常量)
不在全局区:局部变量和const修饰的局部变量(常量)
栈区:(数据由编译器管理开辟和释放)
注意:不要返回局部变量的地址 因为局部变量在函数执行完就销毁了
栈区存放局部变量和形参数据
堆区:由程序员分配释放,若程序员不释放,程序结束时由操作系统回收
用new关键字将数据存放在堆区 int *p=new int(10);
new返回的是该数据类型的指针*p 释放delete p。
在堆区创建一个数组时 int *arr=new int[10],返回数组首地址,释放时写为delete[] arr(加中括号)。
C++引用:
起别名: 数据类型 &别名=原名
例:int a=10;int &b=a;
2.注意事项:
![](https://img-blog.csdnimg.cn/img_convert/4cd77220daf324ec4de0eef2b47a2cc4.png)
引用传递函数形参时实参也会改变
引用函数做返回值:如果函数的返回值是引用,这个函数调用可以作为左值(不要返回局部变量的引用)
本质:引用的本质在c++内部实现是一个指针常量。
![](https://img-blog.csdnimg.cn/img_convert/7f7861191091f7dd879e9d8e496cb137.png)
5.const的使用
![](https://img-blog.csdnimg.cn/img_convert/b64bcbf3d61cd4f887ab60f9c6f3598e.png)
函数的默认参数
形参可以有默认参数,传参的值的优先级更高。
如果参数声明有默认参数,函数实现就不能有默认参数
函数重载的条件
1)同一个作用域下
2)函数名称相同
3)函数参数类型不同,或者个数不同,或者顺序不同
注意事项:函数的返回值不可以作为函数重载的条件,引用可以作为函数重载的条件
7.字符串
C++ string详解,C++字符串详解 (biancheng.net)
8.static_cast
double a = 1.999;
int b = static_cast<double>(a); //相当于a = b ;
9.内联函数 (C++) | Microsoft Learn
10.输出结果保留小数
(100条消息) C / C++ 保留两位小数(setprecision(n)的一些用法总结)_c++保留小数_Ann's Blog的博客-CSDN博客
#include <iomanip> //不要忘了头文件
//第三种写法
cout<<fixed<<setprecision(2);
11.unsigned long long类型是目前C语言中精度最高的数据类型,可以用来表示20以内的阶乘数据,20以外的自测。
![](https://img-blog.csdnimg.cn/img_convert/4dcde134ee67f552f62c138d88585583.png)
类对象
类对象里面的成员函数可以直接调用私有数据成员,不需要定义形参。
例:
![](https://img-blog.csdnimg.cn/img_convert/14a58b97b3267d1e69c97d970b047344.png)
8.类class和结构体struct的区别:
类的默认权限为私有,结构体的默认权限是公有
1.构造函数里面不要重新定义!!!
2.静态成员一定要在类外面初始化!!//float Student::totalDeposit = 0;//float Student::totalPromotion = 0;
调用静态数据成员的函数也必须是静态成员函数!!
static float getTotalDeposit() {
return totalDeposit;
}
static float getTotalPromotion() {
return totalPromotion;
}
3.new的形式:Point *a=new Point[3];
4.释放此空间:delete []a;
5.getline(cin, s, '#');
6.派生类对象对基类进行构造函数时,需要用初始化列表,例如:Person(id, name, sex, age) 赋值的右边要用形参
并且 在输出的时候引用基类的输出函数用此方法:Person::show();
7.前置单目运算符,重载函数没有形参,对于后置单目运算符,重载函数需要有一个整型形参。
8.类的私有成员要一个一个定义,不要偷懒!!!
9.运算符重载的时候要注意函数返回值类型!! 如果在运算符的重载函数中需要操作某类对象的私有成员,可以将此函数声明为该类的友元函数。
前置--的时候没有形参 要有取址符 || 后置有引用到前置函数|| 输出输入时 形参和函数都要有取址符 记得要有返回值 ou和in
10.虚函数的调用时要用指针:void fun(Point* c) { c->show(); }
11.要注意参数类型转换及输出格式
12.islower()判断是否为小写字母 isupper()判断是否为大写字母 toupper()转换为大写字母 tolower()转换为小写字母 isdigit判断是否为数字
https://blog.csdn.net/qq_37007384/article/details/95601222
9.#include<iostream>
using namespace std;
class Point {
public:
Point(int x = 0, int y = 0, int z = 0) {
X = x;
Y = y;
Z = z;
}
~Point() {}
Point operator + (const Point& p2) {//重载+
return Point(X + p2.X, Y + p2.Y, Z + p2.Z);
}
Point& operator --() {//前置--
--X;
--Y;
--Z;
return *this;
}
bool operator ==(const Point& p2) {//前置==
return (X == p2.X && Y == p2.Y && Z == p2.Z);
}
friend Point operator --(Point& c, int) {//后置--
Point p = c;
--c;//引用前置--
return p;
}
friend Point operator +=(Point& c1, Point& c2) {//后置+=
c1.X += c2.X;
c1.Y += c2.Y;
c1.Z += c2.Z;
return c1;
}
friend istream& operator >>(istream& in, Point& c) {//输入
in >> c.X >> c.Y >> c.Z;
return in;
}
friend ostream& operator <<(ostream& out, Point& c) {//输出
out << "(" << c.X << "," << c.Y << "," << c.Z << ")" << endl;
return out;
}
private:
int X; int Y; int Z;
};
int main()
{
Point c1(1, 2, 3);
Point c2(2, 3, 4);
Point c3;
c3 = c1 + c2;
cout << "c1+c2=" << c3 << endl;
--c3;
cout << "c3=" << c3 << endl;
Point c4;
c4=c3--;
cout << "c4=c3--==" << c4 << endl;
cout << "c3=" << c3 << endl;
int x=(c2 == c3);
cout << "c2==c3?" << (x?"相等":"不相等") << endl;
c1 += c3;
cout << "c1+c3=" << c1 << endl;
cin >> c1;
cout << c1 << endl;
return 0;
}