#if 0
#include <iostream>
#include <iomanip>
#include <string>
#include <stdio.h>
using namespace std;
2.2cout控制输出长度.格式:
cout<<setw(8)<<a<<endl; //setw()在头文件<iomanip>中,只能右对齐,等价%8d
cout<<setiosflags(ios::left)<<setw(8)<<a<<endl;//这样为左对齐
cout<<setw(8)<<setprecision(2)<<setiosflags(ios::fixed)<<b<<endl;//b是一个浮点数,等价于%8.2f
cout<<setfill('x')<<set(8)<<a<<endl;//将空白用x填充
cout<<hex<<a<<endl;//等价于printf("%x\n",a);十六进制
cout<<oct<<a<<endl;//等价于printf("%o\n",a);八进制
cout<<a<<endl;//等价于printf("%d\n",a);十进制
//做一个时钟
2.3函数重载(静多态)
//匹配原则 1.严格匹配 2.隐式转换(小到大可以,大到小不可以)寻求匹配,找到则匹配 3.返回值不构成重载
extern "C"{}//语句,将括号内按c的方式编译,不与其他同名函数重载。c库每一个头文件都有 :
//---------------------------------------------------------
#ifdef __cplusplus//如果是c++编译器
extern "c"{
#endif // __cplusplus
#ifdef __cplusplus
}
#endif //表示不使用c++的重载特性
//----------------------------------------------------------
2.4运算符重载(Operator Overload)
//运算符其实就是函数
struct zuobiao //坐标
{
int x;int y;
};
zuobiao operator + (zuobiao a,zuobiao b)
{
zuobiao c;
c.x=a.x+b.x; c.y=a.y+b.y;
return c;
}
2.5默认参数(Default Parameters)
//参数只能从右往左默认,中间不能跳跃
2.6引用(Raference)
//&前为类型名时为引用,其他均为取地址
//变量名,本身是一段内存的引用,即别名(alias)。此处引入的引用是为已有变量起一个别名,声明如下
int a;
int &ra=a;
//1引用是一种声明关系,必须初始化,引用不开辟空间
//2此种声明关系一经声明 不可变更
int &rr=ra;
//3可以对引用,再次引用。多次引用的结果,多个引用指向同一个变量
//引用的本质是对指针的包装,指针可以有引用,但不应该有引用的指针
//应用 不开辟内存空间
swarp(int &ra,int &rb)//^异或运算符 交换两个参数的值
{
ra^=rb;
rb^=ra;
ra^=rb;
}
//const int&ra=a; 能用const就用;use const whatever possible
//思考:引用的本质是什么? int & ra = a; int * const p = &a; 引用的本质是不可以修改指向的指针;
2.7 NewDelete(申请动态内存)
int *p = new int(200); //开一个int类型单变量并初始化为200
int *ps = new string("hellwo world");//开一个string类型单变量并初始化为 hellow world
int *p1 = new int[5]{
0};//开一个int数组 每一项初始化为0;
int **pp = new int*[5];//指针数组,存放的指针
int (*p)[4] = new int[3][4] {
{
0}};//p是一个指针 它指向包含4个int元素的一维数组 p为首地址 记不住怎么写编译器可以给你提示
//也可以new一个结构体 但初始化应用 {} 因为可能有有多个值
/*应用程序在内存中分为
代码区、
全局(静态)数据存储区、
栈区、
堆区。
通过new出来的内存在堆区。
局部变量,函数参数等存在栈区*/
int *p = new int ;
delete p;
int *p=new int[5];
delete []p;
int (*p)[4][3]=new int[5][4][3];
delete []p;
//异常处理 new很少出错 一般别用
int *p = new(std::nothrow) int ;
if(p == nullptr){
return -1}//NULL 好像变成nullptr了c++11
2.8内联函数(Inline Function)
inline int sqr(int i)
{
return i*i;
}//inline 是给编译器的一种建议,编译器来决定是否inline,但你不说编译器一定不inline 66666
//适用环境 函数体很小 且 频繁使用
2.9Cast c++中的强制类型转换
int a=5; float b=6.5;
static_cast //对于隐式类型可以转化的,可用这个
b=static_cast<float>(a); //作者不想让你强转,所以搞这么麻烦 哈啊哈
void *p;int *q;
p=q;//可以
q=p;//不可以 q=static_cast<int*>(p);OK
dynamic_cast
reinterpret_cast //对于无隐式类型的转化,static_cast无效,例如将int赋值给int*指针 reinterpert重新解释
const_cast //脱常 只能用于指针和引用
void fun1(int & v)
{
cout<<v<<endl;
}
int main()
{
const int a;
fun1(a); //这是传不进去的
fun1(const_cast<int &>(a));//这样就传进去了 不要妄图用这个方法修改const 其行为是未定义的且没有意义
return 0;
}
2.10 Const
#define N 200 //宏,在预处理阶段发生了替换
const
c++知识点大全(基础与提高)
最新推荐文章于 2024-09-15 19:20:30 发布
本文详尽探讨C++编程语言的基础概念与高级特性,包括语法、面向对象编程思想、模板和STL等核心知识点,旨在帮助读者全面提升C++技能。
摘要由CSDN通过智能技术生成