
C++
笔记参考狄泰软件学院C++课程
always@(posedge)
这个作者很懒,什么都没留下…
展开
-
【C++】63.C 语言异常处理
异常的概念程序在运行过程中可能产生异常异常(Exception) 与 Bug 的区别异常是程序运行使可预料的执行分支Bug 是程序中的错误,是不被预期的运行方式异常(Exception) 和 Bug 的对比异常运行时产生除 0 的情况需要打开的外部文件不存在数组访问时越界Bug使用野指针堆数组使用结束后未释放选择排序无法处理长度为 0 的数组C 语言经典处理方式: if … else …void func(...){ if(判断是否产生异常)原创 2020-05-20 23:44:41 · 238 阅读 · 0 评论 -
C++ 对象模型分析(下)
第51课 - C++ 对象模型分析(下)继承对象模型在 C++ 编译器的内部类可以理解为结构体子类是由父类成员函数叠加子类新成员得到的class Derived : public Demo { int mk;};编程实验1 :继承对象模型初探#include <iostream>#include <string>using names...原创 2020-04-12 15:51:07 · 185 阅读 · 0 评论 -
C++ 对象模型分析(上)
C++ 对象模型分析(上)回归本质class是一种特殊的struct在内存中 class 依旧可以看作变量的集合class 与 struct 遵循相同的内存对齐规则class 中的成员函数与成员变量是分开存放的每个对象有独立的成员变量所有对象共享类中的成员函数成员函数也是函数,只要时函数,编译之后就是放在代码段中的值得思考的问题class A{ int i;...原创 2020-04-07 22:17:06 · 182 阅读 · 0 评论 -
【C++】5.引用的本质分析
引用的意义引用作为变量的别名而存在,因此在一些场合中可以代替指针 引用相对于指针来说更具有更好的可读性和实用性swap 函数的对比// 指针版本void swap(int *a, int *b){ int t = *a; *a = *b; *b = t}// 引用版本(注意:函数中的引用行参不需要进行初始化!!!)void swap(int&...原创 2020-02-27 13:28:01 · 146 阅读 · 0 评论 -
【C++】34.数值操作符的重载
问题:srting 类还具备 C 方式字符串的灵活性吗?还能直接访问单个字符嘛?类似于数组访问操作符 []?string 类最大限度的考虑了 C 字符串的兼容性 可以按照使用 C 字符串的方式使用 string 对象string s = "a1b2c3d4e";int n = 0;for(int i=0; i<s.length; i++){ if( ...原创 2020-02-09 21:15:02 · 168 阅读 · 0 评论 -
【C++】62.单例类模板
在架构设计时,某些类在整个系统生命期中最多只能有一个对象存在(Single Instance)如何定义一个类,使得这个类最多只创建一个对象?思路要控制类的对象数目,必需对外隐藏构造函数 将构造函数的访问属性设置为 private 定义 instance 并初始化为 NULL 当需要使用对象时,访问 instance 的值 空值:创建对象,并用 in...原创 2020-02-08 20:46:43 · 133 阅读 · 0 评论 -
【C++】33.C++中的字符串
历史原因:从C到C++进化中引入 自定义类型在C++中可以通过类完成字符串类型的定义问题C++中的原生类型是否包含字符串类型?C++语言直接支持C语言的所有概念,但是没有原生的字符串类型。C++标准库提供了 string 类型string 直接支持了字符串连接 string 直接支持字符串的大小比较 string 直接支持子串查找和提取 s...原创 2020-02-06 20:33:48 · 216 阅读 · 0 评论 -
【C++】31.完善的复数类
复数类应该具有的操作利用操作符重载统一实现复数与实数的运算方式 统一实现复数与实数的比较方式 Complex operator + (const Complex& c); Complex operator - (const Complex& c); Complex operator * (const Complex& c)...原创 2020-02-05 22:57:24 · 181 阅读 · 0 评论 -
【C++】30.操作符重载的概念
讨论复数解决方案是否可行class Complex{public: int a; int b;};int main(){ Complex c1 = {1, 2}; Complex c2 = {3, 4}; Complex c3 = c1 + c2; // ? return 0;}解决方案一友元函数...原创 2020-02-04 22:20:17 · 254 阅读 · 0 评论 -
【C++】29.类中的函数重载
函数重载回顾函数重载的本质是相互独立的不同函数 C++ 中通过函数名和函数参数确定函数调用 无法直接通过函数名得到函数重载的入口地址 函数重载必然发生在同一个作用域中类中的重载类中的成员函数可以进行重载构造函数的重载 普通成员函数的重载 静态成员函数的的重载问题:全局函数,普通成员函数以及静态成员函数直接是否可以构成重载?万变不离其宗重载...原创 2020-02-03 21:17:33 · 210 阅读 · 0 评论 -
【C++】28.友元的尴尬能力
什么是友员?友元是C++中的一种关系 友元关系发生在函数与类之间或者类与类之间 友元关系是单项的,不能传递友员的用法在类中以 friend 关键字声明友员 类的友元可以是其它类或者具体函数 友元不是类的一部分 友元不受类中的访问基本的限制 友元可以直接访问具体类的的所有成员使用语法class Point{ double x; doub...原创 2020-02-02 20:48:22 · 200 阅读 · 0 评论 -
【C++】27.二阶构造模式
二阶构造模式(一种小方法)设计模式就是设计方法(前人总结行之可行的一种方法)构造函数类的构造函数用于对象的初始化 构造函数与类同名并且没有返回值 构造函数在对象定义是自动被调用问题如何判断构造函数的执行结果? 在构造函数中执行 return 语句会发生什么? 构造函数执行结束是否意味着对象构造成功?没有办法判断构造函数的执行结果,可以强行定义一个变量...原创 2020-02-01 11:31:01 · 211 阅读 · 0 评论 -
【C++】25.类里面的静态成员变量
成员变量回顾通过对象名能够访问public成员变量 每个对象的成员变量都是专属的 成员变量不能在对象直接共享项目要求统计在程序运行期间某个类的对象数目 保证程序的安全性(不用全局变量来实现计数功能) 随时可以获取当前对象的数目静态成员变量静态成员变量属于整个类所有 静态成员变量的生命周期不依赖任何对象 可以通过类名直接访问公有静态成员变量 所有对象共享类...原创 2020-01-31 11:49:03 · 377 阅读 · 0 评论 -
【C++】46.继承中的构造与析构
问题:如何初始化父类成员?父类构造函数和子类构造函数的有什么关系?子类中可以定义构造函数 子类构造函数必须对继承而来的成员进行初始化 直接通过初始化列表或者赋值的方式进行初始化 调用父类的构造函数进行初始化父类构造函数在子类中的调用方式默认调用适用于无参构造函数和使用默认参数的构造函数显示调用...原创 2020-01-19 10:15:26 · 136 阅读 · 0 评论 -
【C++】45.不同的继承方式
被忽视的细节class Parent{};class Child_A : public Parent{};问题三连冒号(:)表示继承关系, Parent 表示被继承的类,那 public 的意义是什么?是否可以将 public 换成 protected 或者 private,如果可以与 public 继承有什么区别?实验出真知#include...原创 2020-01-17 16:50:41 · 125 阅读 · 0 评论 -
【C++】44.继承中的访问级别
问题子类是否可以直接访问父类中的私有成员?面向对象理论根据C++语法example:class Parent{private: int mv;public: Parent() { mv = 100; } int value() { return mv; ...原创 2020-01-16 21:54:12 · 1360 阅读 · 0 评论 -
【C++】43.继承的概念和意义
类之间是存在直接的关联关系:组合和继承先考虑组合关系(简单),在考虑继承(关系比较复杂)组合关系:整体与部分的关系(最简单的关系)组合的关系特点将其它类的对象作为当前类的成员使用 当前类对象与成员对象的生命周期相同 成员对象在用法上与普通对象完全一致#include <iostream>#include <string>us...原创 2020-01-14 19:22:12 · 202 阅读 · 0 评论 -
【C++】54.被遗弃的多重继承(下)
接着上一课分析 ......多重继承的问题三多重继承可能产生多个虚函数表示例:class BaseA{public: virtual void funcA() { cout << "BaseA::funcA()" << endl; }};class BaseB{ public...原创 2020-01-09 23:23:07 · 212 阅读 · 0 评论 -
【C++】53.被遗弃的多重继承(上)
问题:C++ 中是否允许一个类继承多个父类?C++支持编写多重继承的代码一个子类可以拥有多个父类 子类拥有所有父类的成员变量 子类继承所有父类的成员函数 子类对象可以当作任意父类对象使用多重语法规则class Derived : public BaseA, public BaseB, public BaseC{};多重继承的本质与单继承相同示例:...原创 2020-01-08 22:40:13 · 184 阅读 · 0 评论 -
【C++】40.前置操作符和后置操作符
问题:下面的代码有没有区别?为什么?i++; // i 的值作为返回值, i 自增1++i; // i 自增1, i 的值作为返回值在VS2013分析: i++;00950D45 mov eax,dword ptr [i] 00950D48 add eax,1 00950D4B mov dword ptr ...原创 2020-01-03 17:55:59 · 162 阅读 · 0 评论 -
【C++】21.对象的构造顺序
实际开发中,因为对象的构造顺序的问题导致bug很多。那么C++中的类可以定义多个对象,那对象构造的顺序是怎样的?局部对象程序执行流到达对象的定义语句时进行构造。class Test{ int i;public: Test(int i) { this->i = i; cout << "Test(int...原创 2019-11-19 15:04:56 · 200 阅读 · 0 评论 -
【C++】52.C++中的抽象类和接口
面向对象中的抽象概念面向对象分析,出现一些抽象概念,比如 图形的面积如何进行计算?在现实中需要知道具体的图形才能计算面积,所以对概念上的 “图形”求面积是没有意义的!class Shape{public: double area() { }};shape只是概念上的类型,没有具体对象。问题:shape这样类似的类型有必要存在吗?...原创 2019-11-18 19:24:36 · 162 阅读 · 0 评论 -
【C++】48.同名覆盖引发的问题
什么是父子间的 赋值兼容 问题?子类对象可以当做父类对象使用(兼容性)#include <iostream>#include <string>using namespace std;class Parent{public: int mi; void add(int i) { mi += i; ...原创 2019-11-15 14:49:58 · 142 阅读 · 0 评论 -
【C++】47.父子间的冲突
问题1:子类是否可以定义父类中的同名成员?如何可以,如何区分?如果不可以,为什么?#include <iostream>#include <string>using namespace std;class Parent{public: int mi;};class Child : public Parent{public: ...原创 2019-11-14 16:49:49 · 142 阅读 · 0 评论 -
【C++】49.多态的概念和意义
函数重写:父类中被重写的函数依然会继承给子类。子类中重写的函数将覆盖父类中的函数。通过作用域分辨符可以访问父类中的函数。class Parent{public: void print() { cout << "I'm Parent." << endl; }};class Child : public Par...原创 2019-11-12 16:12:22 · 206 阅读 · 0 评论 -
【C++】35.函数对象分析
编写一个函数:函数可以或得斐波那契数列的每一项。每调用一次返回一次。函数可以根据需要重复使用。#include <string>using namespace std;int fib(){ static int a0 = 0; static int a1 = 1; int ret = a1; a1 = a0...原创 2019-11-07 17:24:17 · 82 阅读 · 0 评论 -
【C++】外传篇1:异常的深度解剖
问题1:如果在main函数中抛出异常,结果会怎么样?include <iostream>using namespace std;class Test {public: Test() { cout << "Test()"; cout << endl; } ~Test(...原创 2019-11-07 10:01:13 · 129 阅读 · 0 评论 -
【C++】外传篇2.函数的异常规格说明
问题:如何判断一个函数是否会抛出异常,以及抛出哪些异常,(第三方库只有说明,没有对应的函数)问题:如果抛出的异常不在声明列表里面会发生什么?// 异常规格之外的异常void func() throw(int){ cout << "func()" << endl; throw 'c';}int main(){...原创 2019-10-20 16:23:29 · 151 阅读 · 0 评论 -
【C++ 】统计对象中某个成员变量的访问次数
代码实现如下功能:统计对象中某个成员变量的访问次数?class Test{ int m_value; mutable int m_count; public: Test(int value = 0) : m_pCount(new int(0)) { m_value = value; m_count = 0;...原创 2019-10-12 23:40:51 · 316 阅读 · 0 评论 -
【C++】64.C++中的异常处理(上)
try{ double r = devide(1, 0)}catch(...){ cout << "Devide by zero ..." << endl;}double devide(double a, double b){ const double delte = 0.000001; double ret = 0;...原创 2019-09-30 15:40:29 · 141 阅读 · 0 评论 -
【C++】59.类模板的深度解剖
类模板可以定义任意多个不同类型的参数template <typename T1, typename T2>class Test{ public: void Add(T1 a, T2 b);};Test<int, float>t//一一指定参数类型。类模板的特化根据需要分开实现(可以在特化的地方实现不同的函数),本质还是同一个模...原创 2019-11-02 10:20:45 · 151 阅读 · 0 评论 -
【C++】58.类模板的概念和意义
C++将泛型编程的思想运用到类中C++类模板以相同的方式处理不同的类型。类声明前使用 template进行标识。<typename T> 用于说明类中使用泛型类型Ttemplate <typename T>class Operator{ public: T op(T a, T b);};类模板的应用只能显示指定具体的类型...原创 2019-11-01 10:02:09 · 136 阅读 · 0 评论 -
【C++】11.新型类型转换
分析如下代码:#include <stdio.h>typedef void(PF)(int);struct Point{ int x; int y;};int main(){ int v = 0x12345; PF* pf = (PF*)v; char c = char(v); Point* p = (Point*...原创 2019-10-31 15:40:24 · 183 阅读 · 0 评论 -
【C++】41.类型转换函数
C语言中纯在如下的转换 unsigned int ui = 1000; int i = -2000; cout << ui + i << endl; //是个正数, int 隐式类型转换成了unsigned int short s = 'a';cout << "sizeof(s + 'b') = " <&l...原创 2019-10-09 15:44:31 · 228 阅读 · 0 评论 -
【C++】65.C++中的异常处理(下)
问题:为什么将扑捕获的异常再次扔出去??答:工程中可以重新解释异常开发自己的统一异常类型,方便快速查找问题 !!(因为第三方库没有源代码的,只有输入输出的说明以及函数原型)类类型的异常处理类对象异常,catch语句采用引用作为参数,避开拷贝构造void Myfunc(){ try { func(110); }...原创 2019-10-07 21:34:17 · 105 阅读 · 0 评论 -
【C++】26.类的静态函数
未完成的需求随时可以获取当前对象的数目问题分析:我们需求改进不依赖对象就可以访问静态成员变量 必须保证静态成员变量的安全性 方便快捷的获取静态成员变量的值利用新的办法:静态成员函数C++中的静态成员函数静态成员函数是类中特殊的成员函数 静态成员函数属于整个类所有 可以通过类名直接访问公有静态成员函数 可以通过对象名访问公有静太成员函数cla...原创 2019-09-23 17:05:47 · 612 阅读 · 0 评论 -
【C++】20.初始化列表
问题:是否可以类里面定义cons成员变量?如何在类里面初始化const变量? class Test { const int m_i; public: Test() : m_i(10) { // m_i = 10; // error只读变量不能出现赋值符合左边 } int getI() ...原创 2019-09-17 17:49:40 · 204 阅读 · 0 评论 -
【C++】36.经典问题三
问题1:什么时候需要重载赋值操作符?编译器是否提供默认的赋值操作符?class Test{ int* m_pointer; // 类成员里面申请了系统资源public: Test() { m_pointer = NULL; } Test(int i) { m_pointer = new i...原创 2020-02-08 17:29:57 · 164 阅读 · 0 评论 -
【C++】32.初探标准库
进行一个有趣的重载//开始试验class Test{ public: void operator << (int i) { printf("%d", i); }};Test cout;cout.operator << ( 1)// cout << 1;...原创 2019-10-23 17:41:36 · 143 阅读 · 0 评论 -
【C++】68.迷惑的写法
问题1:下面的程序表达什么意思?Class 和typename一样,原因如下template < class T >class Test{public: Test(T t) { cout << "t = " << t << endl; }};template < cl...原创 2019-10-22 19:41:57 · 139 阅读 · 0 评论