C++ 笔记

#include <iostream>
using namespace std;
//? 第七章
//! 定义指针一定要初始化,因为未初始化的指针可能指向系统位置的内存地址 例如 long* p; *p = 23334; 上述做法是很危险的
//! 当需要内存是可以是用new来请求,在使用完内存后需要用delete来归还内存 int * pt = new int; delete pt; 
//! 这样做将释放pt指向的内存,而不会删除pt指针本身.不让对同一块内存使用两次delete
//TODO 使用new创建数组返回的是数组第一个元素的地址  int * pt = new int[10];
//TODO 常量指针 const int* pt 指针指向的值不能别修改 指针常量 int* const pt 指针常量 指针的指向不能修改
//! 数组指针(一个行指针)与指针数组(是指针组成的数组)的区别
//TODO int(*pt)[4] 括号的优先级高,首先说明pt是一个指针, 指向一个一维数组,一维数组的长度是四 用法如:
//TODO int a[3][4]; int(*pt)[4]=a;
//TODO int* pt[4] 指针数组 保存了四个int指针的数组
//!函数指针(函数的地址是存储其机器语言代码的内存的开始地址)
//TODO 1.获取函数的地址
//TODO 使用函数名字就能获取函数的地址.例如think()是一个函数,则think就是该函数的地址.
//TODO process(think) 传入的是think函数的地址
//TODO process(think()) 传入的是think函数的返回值
//TODO 2.声明函数指针
//TODO double (*pf)(int) 返回值是double,入参是一个int的指针
//TODO double *pt(int) 一个函数原型,返回值是个double类型的指针
//TODO 3.使用函数指针
// int add(int a,int b)
// {
//     return a + b;
// }
// int main()
// {
//     int (*pt)(int,int) = add;
//     int add = pt(1,1);
//     cout << add << endl;
// }
//? 第八章
//! 内联函数的优点:运行速度比常规函数快  缺点:需要占用更多的内存
//TODO 内联函数的定义:省略函数原型,讲函数头和函数代码放在本应该提供原型的地方,并加上关键字inline
//! 引用变量
//! 创建引用变量 int rats = 101; int& ref = rats;
//! 引用和指针的差别 必须创建时就进行初始化,且一旦和某个常量关联,就讲一直效忠它
//! int rat; int& ref; ref = rat ;这样是编译不通过的
//! int& ref = rat; 相当于 int* const p = &rat;
//TODO 引用经常被用做于函数的传递 函数值传递 它传入的是变量的拷贝,在函数体内修改将不会影响传入变量的值
//TODO 引用传递传递的是变量的地址,函数体内修改将影响变量的值
//TODO 如果函数只是使用值而不是修改它们,尽量使用const
//! 返回引用的好处就是不许要把返回值复制到一个临时的位置.然后再复制给一个接受变量 但需要注意避免返回函数终止时不在存在的引用,就是不要返回局部变量的引用 例如
//! 方法{ 对象 A; return A;}A对象在函数运行完之后就被释放掉了,应该使用new来分配新的内存
//? 第九章
//TODO 自动存储持续性:一般来讲是定义在函数体内的局部变量,在执行完函数时,它们的内存将被释放
//TODO 静态存储持续性:在函数定义外定义的变量或使用关键字static定义的变量,它们在程序整个运行过程中都存在
//! 静态变量的链接性:
//TODO 外部链接性:在代码块外面申明它
//TODO 内部链接性:在代码块外面申明它,并使用static限定符
//TODO 无链接性:在代码快内部申明它,并使用static限定符
// int global = 1;//外部链接性
// static int one_file = 1;//内部链接性
// void func1()
// {
//     static int count = 0;//无链接性
//     int ll = 0;
// }
// void func2()
// {}
//TODO count与ll变量的区别就是count在函数没被执行时就存在与内存中,one_file只能在当前包含它的文件中使用,global可以在程序中被其他文件使用
// file1 文件一定义了一个全局的errors
// int errors = 20;
// file2 文件二定义了一个全局的errors    
// int errors = 10;
//! 上述做法是失败了,因为它定义了两个外部链接性变量 其他文件应该使用extern声明
//TODO 动态存储持续性:用new运算符分配的内存讲一直存在,直到使用delete运算符释放或者程序结束
//TODO mutable用法:结构或者类变量为const时,被mutable修饰的成员变量仍可以被修改
//TODO 默认情况下全局变量的链接性为外部,但是const全局变量的链接性为内部 原因:假设将一组常量放在头文件中,并在同一个程序的多个文件中使用该头文件
//TODO 那么,所有源文件都将包含定义的常量,若const声明的全局变量的链接性为外部,根据单定义规则,会出错.内部链接性还意味着,每个文件都有自己的一组常量,
//TODO 而不是所有文件共享一组常量,每个定义都是其所属文件私有的.可以用extern关键字来覆盖默认的内部链接性
//!名称空间 通过定义一种新的声明区域来创建命名的名称空间,一个名称空间的名称不会与另外一个名称空间的相同的名称发生冲突
//? 第十章
//!构造函数:c++将提供默认的构造函数 Stock stock;这句代码将调用隐式的默认构造函数
//!如果定义了类的构造函数,必须显示的提供默认构造函数,不然会报错
//TODO 每个成员函数都有一个this指针,this指针指向调用对象
//!创建一个由所有对象共享的常量,您可能认为这样做可行
// class A
// {
//     private:
//     const int a = 1;
// };
//!但这是行不通的,声明类只是描述了对象的形式,并没有创建对象.讲没有可用的储存空间,应使用关键字static
// class A
// {
//     private:
//     static const int a = 1;
// };
//!该常量讲与其他静态变量储存在一起,而不是储存在对象中
//TODO 友元函数的引出
//TODO 当我们对类的乘法运算进行重载后 A = B*2.5;将会被转换为A = B.operator*(A) 左侧的操作数是调用对象
//TODO 那么如果要写成 A = 2.5*B呢 那么就只能用非成员函数,class operator*(double m,const A& t);但是非成员函数又不能直接调用类的成员变量
//TODO 创建友元函数 friend class operator*(double m,const A& t);
//TODO ①虽然operator*()函数在类声明中声明,但是它不是成员函数,因此不能使用成员运算符调用;
//TODO ②虽然operator*()函数不是成员函数,但它与成员函数的访问权限相同;
//TODO 友元函数常用于重载<<运算符
// friend ostream & operator<<(ostream & os,const A&t )
// {
//     return os;
// }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值