C++学习记录
chainfitness
这个作者很懒,什么都没留下…
展开
-
C++资源
1.cppreferencehttps://en.cppreference.com/w/2.LearnCpphttps://www.learncpp.com/3.Cplusplushttp://www.cplusplus.com/4.TutorialsPointhttps://www.tutorialspoint.com/cplusplus/index.htm5.Awesome C++https://github.com/fffaraz/awesome-cpp6、书栈网https://原创 2021-09-18 16:22:34 · 592 阅读 · 0 评论 -
C++引用作为函数返回值
目录代码返回值代码//返回局部变量引用int& test01() { int a = 10; //局部变量 return a;}//返回静态变量引用int& test02() { static int a = 20; return a;}int main() { //不能返回局部变量的引用 int& ref = test01(); cout << "ref = " << ref << endl; cout &l原创 2021-09-18 15:26:49 · 803 阅读 · 0 评论 -
深拷贝与浅拷贝
这里写目录标题浅拷贝带来的问题引入深拷贝解决问题总结浅拷贝带来的问题如果有属性是在堆区开辟的,而且使用的是编译器默认提供的拷贝构造函数(浅拷贝),因为浅拷贝是将p1完完整整的拷贝一份给p2(包括新建堆区的内存空间),所以会在实现通过析构函数释放堆区空间时导致重复释放的操作,会报错,导致程序无法运行。错误案例如下:#include <iostream>using namespace std;class Person {public: //无参(默认)构造函数 Person() {原创 2021-09-18 11:22:25 · 553 阅读 · 0 评论 -
C++拷贝构造函数调用时机
C++中拷贝构造函数调用时机通常有三种情况使用一个已经创建完毕的对象来初始化一个新对象值传递的方式给函数参数传值(C++中,值传递是将实参复制一份传给形参)以值方式返回局部对象(C++中,值方式返回也是将局部对象复制一份返回)class Person {public: Person() { cout << "无参构造函数!" << endl; mAge = 0; } Person(int age) { cout << "有参构造函数!" &原创 2021-09-18 08:34:09 · 788 阅读 · 0 评论 -
C++类内3种访问权限
类在设计时,可以把属性和行为放在不同的权限下,加以控制访问权限有三种:public 公共权限protected 保护权限private 私有权限//三种权限//公共权限 public 类内可以访问 类外可以访问//保护权限 protected 类内可以访问 类外不可以访问 儿子可以访问父亲的保护内容//私有权限 private 类内可以访问 类外不可以访问 儿子不可以访问父亲的私有内容class Person{ //姓名 公共原创 2021-09-10 09:51:14 · 3539 阅读 · 0 评论 -
C++中引用的本质
本质:引用的本质在c++内部实现是一个指针常量.引用就是指针的一个特例,即不可修改指针朝向的指针。我们在使用引用时,编译器会自动把int* const ref = &a; 指针常量是指针指向不可改,也说明为什么引用不可更改讲解示例://发现是引用,转换为 int* const ref = &a;void func(int& ref){ ref = 100; // ref是引用,自动解引用转换为*ref = 100}int main(){ int a = 10;原创 2021-09-10 08:55:00 · 563 阅读 · 0 评论 -
值传递、地址传递、引用传递
引用做函数参数**作用:**函数传参时,可以利用引用的技术让形参修饰实参**优点:**可以简化指针修改实参//1. 值传递(形参无法修饰实参)void mySwap01(int a, int b) { int temp = a; a = b; b = temp;}//2. 地址传递(形参可以修饰实参)void mySwap02(int* a, int* b) { int temp = *a; *a = *b; *b = temp;}//3. 引用传递(形参可以修饰实参)v原创 2021-09-10 00:31:47 · 797 阅读 · 0 评论 -
栈区和堆区
栈区由编译器自动分配释放, 存放函数的参数值,局部变量等注意事项:1.不要返回局部变量的地址;2.栈区开辟的数据由编译器自动释放,这个函数运行结束后,此函数的形参和局部变量将被自动释放。int * func(){ int a = 10; return &a;}int main() { int *p = func(); cout << *p << endl;//第一次系统会有保护机制,以防误操作 cout << *p <<原创 2021-09-10 00:01:28 · 602 阅读 · 0 评论 -
C++内存分区(程序运行前)
内存分区C++程序在执行时,将内存大方向划分为4个区域代码区:存放函数体的二进制代码,由操作系统进行管理的全局区:存放全局变量和静态变量以及常量栈区:由编译器自动分配释放, 存放函数的参数值,局部变量等堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收示意图:...原创 2021-09-09 23:31:32 · 595 阅读 · 0 评论 -
指针与数组
1.常量指针和指针常量常量指针即const在星号前面,被限制的指针只可以更改指针朝向(地址),不能更改解引用的值指针常量即const在星号后面,被限制的常量只可以更改解引用的值,不能更改指针朝向(地址)小技巧:看const右侧紧跟着的是指针还是常量, 是指针就是常量指针,是常量就是指针常量int main() { int a = 10; int b = 10; //const修饰的是指针,指针指向可以改,指针指向的值不可以更改 const int * p1 = &a; p1原创 2021-09-09 22:32:38 · 474 阅读 · 0 评论