【C++深度解析】1、C 到 C++ 的升级【C++深度解析】2、C/C++ 中的 const【C++深度解析】3、布尔类型和引用【C++深度解析】4、内联函数分析【C++深度解析】5、函数参数的扩展【C++深度解析】6、函数重载【C++深度解析】7、C++ 中的命名空间【C++深度解析】8、C++ 中的类型转换【C++深度解析】9、const 常量?只读变量?【C++深度解析】...
原创
2021-07-27 15:14:29
498阅读
C 语言中的 constconst 修饰的变量是只读的,本质还是变量const 修饰的局部变量在栈上分配空间const 修饰的全局变量在只读存储区分配空间(修改将导致程序崩溃)const 只在编译器有用,在运行期无用const 不能定义真正意义上的常量,只是告诉编译器该变量不能出现在赋值符号的左边...
原创
2021-07-12 14:54:44
1767阅读
1 C 和 C++ 的关系C++ 继承了所有的 C 特性C++ 在 C 的基础上提供了更多的语法和特性C++ 的设计目标是运行效率和开发效率的统一2 C 到 C++ 的升级1、C++ 中所有的变量都可以在使用时再定义对比:C 语言中的变量都必须在作用域开始的位置定义!!int c = 0;for(int i = 0; i <= 3; i++){ for(int ...
原创
2021-07-12 14:54:44
436阅读
虚函数表一般继承无虚函数覆盖一般继承有虚函数覆盖多重继承无虚函数覆盖多重继承有虚函数覆盖安全性结束语附录一VC中查看虚函数表附录 二例子
转载
2023-05-10 20:52:01
123阅读
文章目录1 C 方式的强制类型转换1.1 C强制类型转换存在的问题2 新式类型转化3 小结1 C 方式的强制类型转换(Type)(Expression)Type (Expression)直接看编程实验:粗暴的类型转换// 8-1.c#include<stdio.h>typedef void(PF)(int); // 定义函数类型 void(int)struct P...
原创
2021-07-12 14:54:38
143阅读
在 C 语言中只有一个全局作用域,C语言中得到所有全局标示符共享一个作用域,标示符之间可能发生冲突。C++ 提出了命名空间的概念命名空间将全局作用域分成不同的部分不同命名空间中的标示符可以同名而不会发生冲突命名空间可以嵌套全局作用域也叫默认命名空间C++ 中命名空间的定义C++ 中命名空间的使用使用整个命名空间:using namespace name;使用命名空间中的变...
原创
2021-07-12 14:54:39
159阅读
文章目录1 静态类型与动态类型2 typeid 获取类型信息3 小结1 静态类型与动态类型面向对象中可能有基类指针指向子类对象,基类引用成为子类对象的别名。如图所示,父类指针指向子类的对象,我们可以分为静态类型和动态类型。静态类型:变量(对象)自身的类型动态类型:指针(引用)所指向对象的实际类型看如下代码,进行类型转换,这样的转换安全吗?Base 是基类,Derived 是派生类,将父...
原创
2021-07-12 14:51:07
969阅读
文章目录1 初识重载1.1 重载条件1.2 避免默认参数碰到函数重载1.3 编译器调用重载函数的准则2 函数重载的本质3 重载与指针4 C++ 和 C 相互调用5 小结1 初识重载函数重载指的是用同一个函数名定义不同的函数,当函数名和不同的参数搭配时函数的含义不同。编程实验:函数重载初探// 6-1.c#include <stdio.h>#include<string...
原创
2021-07-12 14:54:40
291阅读
C++是一门强大且灵活的编程语言,其设计理念深深植根于对变量作用域的精妙管理。变量作用域定义了程序中变量的可见性和生命周期,是开发高效、可靠程序的重要基础。本文将全面深入地探讨C++中的变量作用域,涵盖作用域的基本概念、局部变量与全局变量的特性、不同作用域的种类、作用域的嵌套、作用域的生命周期、以及在实践中的应用。希望通过这一详细的讨论,能够帮助读者更好地理解变量作用域的内在机制,并能够在实际编程
文章目录1 catch 将捕获的异常抛出1 catch 将捕获的异常抛出catch 中捕获的异常可以被重新解释后抛出catch 可以捕获异常,也可以重新抛出,抛出的异常被外层的 catch 捕获。void Demo(){ try { try { throw 'c'; } catc...
原创
2021-07-12 14:51:08
135阅读
文章目录1 异常的概念2 C++中的异常1 异常的概念程序在运行过程中可能产生异常,异常与 Bug 的区别如下:异常是程序运行时可预料的执行分支Bug 是程序中的错误,是不被预期的运行方式下面列举几个常见的异常与 Bug。异常运行时产生除 0 的情况需要打开的外部文件不存在数组访问时越界Bug使用野指针堆数组使用后未释放选择排序无法处理长度为 0 的数组2 ...
原创
2021-07-12 14:51:09
478阅读
文章目录1 shared_ptr动态内存管理经常出现问题:一种是忘记释放内存,会造成内存泄漏;引用释放的内存,产生引用非法内存的指针。引入智能指针解决上面的问题,自动释放所指向的对象。shared_ptr 允许多个指针指向同一个对象,unique_ptr 则“独占”所指向的对象。weak_ptr 是一种弱引用,指向shared_ptr所管理的对象,这三种智能指针都定义在memory头文件中。1...
原创
2021-07-12 14:51:10
192阅读
文章目录1 数值型模板参数2 数组模板类3 数组类改造4 小结1 数值型模板参数模板参数可以是数值型参数,如下所示,模板参数 N 是个数值。数值型模板参数的限制变量,浮点数,类对象不能作为模板参数本质:模板参数是在编译阶段被处理的单元,因此,在编译阶段必须准确无误的唯一确定。编程实验:计算 1 + 2 + 3 + ……+N 最高效的方式// 45-1.cpp#include&...
原创
2021-07-12 14:51:11
57阅读
文章目录1 临时对象的产生1.1 产生了临时对象1.2 问题解决2 编译器会减少临时对象3 小结
1 临时对象的产生
1.1 产生了临时对象
首先,我们先看一段代码,
//15-1.cpp
#include<stdio.h>
class Test
{
public:
Test(int i) : x(i){}
Test()
{
Test(0);
...
原创
2021-07-12 14:53:38
132阅读
文章目录1 类和对象2 类之间的基本关系3 类的表示法4 小结1 类和对象类用于抽象的描述一类事物所特有的属性和行为对象是一个具体的事物,拥有其所属类的所有属性,并且每个属性都是一个特有的值2 类之间的基本关系继承从已存在类细分出来的类和原始类之间具有继承关系(is-a)继承的类(子类)拥有原类(父类)的所有属性和行为继承表现得是抽象与具体得关系。组合一些类...
原创
2021-07-12 14:54:36
78阅读
文章目录1 对象内存布局2 调用成员函数本质3 小结1 对象内存布局class 是一种特殊的 structclass 与 struct 遵循相同的内存对齐规则class 中的成员函数与成员变量分开存放(每个对象有独立的成员变量,所有对象共享类中的成员函数)编程实验:对象内存布局// 35-1.cpp#include<iostream>using namespace...
原创
2021-07-12 14:51:22
235阅读
文章目录1 C++ 标准库1.1 重载左移操作符1.2 C++标准库2 C++ 中的字符串类2.1 字符串与数字的转换2.2 字符串循环右移3 小结
1 C++ 标准库
1.1 重载左移操作符
我们先来说一下重载左移操作符,下面看一段有趣的代码
#include<stdio.h>
const char endl = '\n';
class Console
{
public:
C...
原创
2021-07-12 14:53:32
496阅读
文章目录1 多参数类模板2 类模板特化3 函数模板特化4 小结1 多参数类模板类模板可以定义任意多不同的类型参数2 类模板特化类模板可以被特化指定类模板的特定实现部分类型参数必须显示指定根据类型参数分开实现类模板编译器自动择优选择类模板可以分为部分特化和完全特化两种类型部分特化–>用特定规则约束类型参数完全特化–>完全显示指定类型参数编程实验:...
原创
2021-07-12 14:51:12
176阅读
需要栈空间存储临时变量,同时需要调用构造函数创建对象,调用析构函数销毁对象。
原创
2021-07-12 14:53:28
1994阅读
文章目录1 对象构造的顺序1.1 堆对象的构造顺序1.2 全局对象的构造2 小结
1 对象构造的顺序
局部对象:程序执行流到达对象的定义语句时进行构造
堆对象:当程序的执行流到达 new 语句时创建对象
全局对象:构造顺序是不确定的
1.1 堆对象的构造顺序
当程序执行流到达new语句时创建对象
使用 new 创建对象将自动触发构造函数的调用
// 14-1.cpp
#include<...
原创
2021-07-12 14:53:39
120阅读