参考柳婼的《从放弃C语言到使用C++刷算法的简明教程v4.7》,黑马,C语言中文网教程,及一些经验
从其他语言(C,Java)快速入门c++刷题
#include
using namespace std;
类型 | 关键字 |
---|---|
布尔型 | bool |
字符型 | char |
整型 | int |
浮点型 | float |
双浮点型 | double |
无类型 | void |
宽字符型 | wchar_t |
一些基本类型可以使用一个或多个类型修饰符进行修饰:
字符‘ ’ (占用1个字节;字符型变量并不是把字符本身放到内存中存储,而是将对应的ASCII编码放入到存储单元)
变量其实只不过是程序可操作的存储区的名称。C++ 中每个变量都有指定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上。
类型 | 描述 |
---|---|
bool | 存储值 true 或 false。 |
char | 通常是一个字符(八位)。这是一个整数类型。 |
int | 对机器而言,整数的最自然的大小。 |
float | 单精度浮点值。单精度是这样的格式,1位符号,8位指数,23位小数。 |
double | 双精度浮点值。双精度是1位符号,11位指数,52位小数。 |
void | 表示类型的缺失。 |
wchar_t | 宽字符类型。 |
C++ 也允许定义各种其他类型的变量,比如枚举、指针、数组、引用、数据结构、类等等,这将会在后续的章节中进行讲解。
char str[]=" "
string str2=""( 头文件:#include)
string(小写) 本质是一个类, & char *
操作符两端字符串,按字典序大小的比较==,!=,<,>,<=,>=。
追加 += append()
查找、替换int find(),rfind()
比较 s1.compare(s2) >0 s1>s2
存取:单个字符
修改 str[0]=‘x’; str.at(1)=“x”;
插入 str.insert(1,“111”)删除 erase(起始1,删个数3)
返回子串str.substr(1,3个)
#include
#include
using namespace std;
int main() {
char c;
cin >> c;
if ( isalpha(c) ) {
cout << "c is alpha" ;
}
return 0 ;
}
cin读取数据,以空格、tab或换行作为分隔符, 若题目中有格式化要求输入则需使用scanf.
整/整=整
a++,a–值不变
.h
#include
using namespace std;
void swap(int a);
.cpp
#include
using namespace std;
#include “swap.h”
void swap(int a){ }
与c区别结构体不用写struct
地址传递 printStu(&s);
值传递 prinStu(s);
C++程序在执行时,将内存大方向划分为4个区域
代码区
存放函数体的二进制代码,由操作系统进行管理的
共享,只读
全局区:
存放全局变量,静态变量,常量
os释放
程序运行后
栈区:
存 局部变量,形参,不要返回局部变量地址
由编译器自动分配释放,存放函数的参数值,局部变量等
堆区:new delete[] arr
用指针接收返回的地址,指针(本质是局部变量)
由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收
内存四区意义:
不同区域存放的数据,赋予不同的生命周期,给我们更大的灵活编程
作用: 给变量起别名
语法: 数据类型 &别名=原名
本质: 指针常量
引用必须初始化,不可更改
注意区别:三种传递方式
默认参数 int fun(int a**,int b=20**){} 放最右
占位参数 int fun(int a,int){}
函数重载 除返回值不同
class Student{
public:
string name;
void showName(){
}
}
struct 默认权限public & class 默认private
circle.h
#pragma once 防止头文件重复包含
#include
using spacename std;
#include "point.h"
class Circle{
public:
void setR(int r);
Point getCenter();
private:
int R;
Point c;
}
circle.cpp
#include "circle.h"
void Circle::setR(int r){ //::全局作用域限定
r=r;
}
Point Circle::getCenter(){
return r;
}
main.cpp
#include
using spacename std;
#include "point.h"
#include "circle.h"
void isInCircle(){
}
int main(){
}
对象初始化和清理(构造函数,~类名(无参数){}析构函数)编译器自动调用
拷贝构造函数 Person(const Person &p){ age=p.age; }
//调用
//1.括号法 Person p1();错的,默认为函数声明
Person p1;
Person p2(10);
Person p3(p2);
//2.显示法 Person(10);匿名对象
Person p1;
Person p2=Person(10);有参构造
Person p3=Person(p2);拷贝构造 ,不能匿名
//4.隐式转化法
Person p4=10; //相当于 Person p4=Person(10);
Person p5=p4;
C++中拷贝构造函数调用时机通常有三种情况:
使用一个已经创建完毕的对象来初始化一个新对象
值传递的方式给函数参数传值
以值方式返回局部对象
默认情况下,C++编译器至少给一个类添加3个函数
1.默认构造函数(无参,函数体为空)
2.默认析构函数(无参,函数体为空)
3.默认拷贝构造函数,对属性进行值拷贝
构造函数调用规则如下:
浅拷贝:简单的赋值拷贝操作,Q堆区内容重复释放
深拷贝:在堆区重新申请空间,进行拷贝操作
初始化列表 构造函数():属性1(值1)
Person(int a,int b) : m_A(a),m_B(b){}
类对象作为类成员
在C++中,类内的成员变量和成员函数分开存储,只有非静态成员变量才属于类的对象上
空指针访问成员函数
stl刷题必备知识点