随笔分类 -  C++

摘要:异常:错误,意料之外的情况 常见的错误处理方法: 1.全局错误码 给每个错误定义一个错误码,赋值给全局变量 int n_gError 例如C语言库和windows编程的GetLastError() 缺点:维护困难 2.函数返回值 例如成功返回0,失败返回1... 缺点:函数调用层次多时,内层函数调用 阅读全文
posted @ 2020-05-28 08:48 八转达人 阅读(132) 评论(0) 推荐(0)
摘要:调用模板函数时,编译器根据调用参数推断出模板参数,用来实例化一个特定版本的函数。 template<typename T> T Add(T a, T b) { return a + b; } template<typename T,typename U> T Add(T a, U b) { retu 阅读全文
posted @ 2020-05-27 09:03 八转达人 阅读(240) 评论(0) 推荐(0)
摘要:11 阅读全文
posted @ 2020-05-27 07:02 八转达人 阅读(130) 评论(0) 推荐(0)
摘要:一.无虚继承 1.单个类,无虚函数 按成员定义的顺序排列 B::member1 B::member2 2.单个类,有虚函数 虚表指针在偏移0处 __vfptr B::member1 B::member2 3.单继承,无虚函数 先父类,再子类 B::member1 B::member2 D::memb 阅读全文
posted @ 2020-05-24 09:36 八转达人 阅读(228) 评论(0) 推荐(0)
摘要:一.函数重载 1.函数名相同,参数列表不同(个数,顺序,类型) 2.vritual关键字、调用约定和返回值不做参考 二.函数覆盖(子类重写的虚函数覆盖了虚表中父类的虚函数,多态) 1.子类函数和父类函数声明一致(函数名,调用约定,参数列表,返回值) 2.父类函数有virtual关键字,子类可以不加v 阅读全文
posted @ 2020-05-24 07:53 八转达人 阅读(172) 评论(0) 推荐(0)
摘要:1.构造顺序:按继承顺序,先继承的先构造,同样遵循先构造父类,再构造子类的规则。 2.析构顺序,与构造顺序相反。 3.内存分布:按继承顺序,先继承的分布在前,同样遵循先构造父类,再构造子类的规则。 class Sofa { public: Sofa() { cout << "Sofa()" << e 阅读全文
posted @ 2020-05-22 07:47 八转达人 阅读(200) 评论(0) 推荐(0)
摘要:纯虚函数:函数声明后加=0,无实现。 有纯虚函数的类是抽象类,无法实例化抽象类 子类如果没有重写纯虚函数,那么子类也是抽象类,也无法实例化 用途:规范化接口,强制子类实现某些接口(成员函数) class Animal { public: virtual void Speak() = 0;//有纯虚函 阅读全文
posted @ 2020-05-21 20:52 八转达人 阅读(168) 评论(0) 推荐(0)
摘要:多态:不关心子类对象的具体类型,调用子类对象自己的虚函数。 实现:虚函数。通过父类的指针或引用调用虚函数时才发生动态绑定。 虚表:虚函数构成的数组。 虚表指针:指向数组的指针 虚表指针的赋值时机:每个类在构造和析构时,会把虚表指针填成自己虚表的地址。子类构造时,先构造父类,于是先赋值为父类的虚表指针 阅读全文
posted @ 2020-05-20 07:55 八转达人 阅读(268) 评论(0) 推荐(0)
摘要:基类:base 派生类:derived protected修饰的成员可以被类自身和派生类访问,类外不能访问 基类 子类是否可访问 类外是否可访问 public YES YES private NO NO protected YES NO 构造时,基类先构造,派生类后构造。 析构时,派生类先析构,基类 阅读全文
posted @ 2020-05-16 22:26 八转达人 阅读(123) 评论(0) 推荐(0)
摘要:1.友元 1.1可以访问所有成员(公有,私有) 2.1友元不是类的成员,也不受它所在区域访问控制级别的约束 2.2普通函数,类的成员函数,整个类都可以声明为友元 2.3友元破坏了封装性,不到万不得已不要用 2.4运算符重载时适合用友元 class HasPtr;//前向声明 class Test { 阅读全文
posted @ 2020-05-15 08:03 八转达人 阅读(150) 评论(0) 推荐(0)
摘要:1.常量成员函数 1.1把this指针的类型变为const type *const this 1.2常量成员函数内部不能修改其成员,但这只是语法层面的限制 void foo() const { //this->p = nullptr;//编译报错 HasPtr *ptr = (HasPtr*)thi 阅读全文
posted @ 2020-05-13 20:59 八转达人 阅读(208) 评论(0) 推荐(0)
摘要:一.this指针 1.不同的对象,数据成员是独有的,成员函数是共享的 2.调用成员函数的时候,会默认传入this指针,this指针指向了调用函数的对象的首地址 3.this通过ecx传递,调用约定 __thiscall 4.成员函数的调用约定可以修改 5.this指针是class *const th 阅读全文
posted @ 2020-05-12 09:07 八转达人 阅读(268) 评论(0) 推荐(0)
摘要:一.面向对象编程思想(抽象,封装,继承,多态) 抽象:把不通用的(会变化的)代码变得通用 如何抽象?刚入门时有个简单的方法:分类 假设写一个游戏,为了使人物移动,给代表人物的类定义X和Y两个数据成员,代表坐标。为了使其通用,可以把X和Y抽出来,定义为一个坐标类。 阅读全文
posted @ 2020-05-09 08:13 八转达人 阅读(102) 评论(0) 推荐(0)
摘要:/* 只写声明,不写实现,然后直接调用,查看错误提示 void __cdecl foo(int)" (?foo@@YAXH@Z) void __cdecl foo(int,int)" (?foo@@YAXHH@Z) void __cdecl foo(char,short,int,__int64)" 阅读全文
posted @ 2020-05-08 12:27 八转达人 阅读(258) 评论(0) 推荐(0)
摘要:一.命名空间 C语言中为避免冲突,可能采用 项目名_模块名_名字 的形式,缺点是冗长 C语言中作用域:块,局部(函数),文件,全局 C++有采用命名空间 用法1:using namespace MyNamespace; namespace MyNamespace { //可以做所有能在全局作用域中做 阅读全文
posted @ 2020-05-08 08:28 八转达人 阅读(204) 评论(0) 推荐(0)
摘要:一.bool bool val = true;//vs中占1字节,内存中数值为0x01 val = false;//内存中数值为0x00 val = 100;//内存中数值为0x01,warning C4305: “=”: 从“int”到“bool”截断 val = -1;//内存中数值为0x01, 阅读全文
posted @ 2020-05-07 09:41 八转达人 阅读(551) 评论(0) 推荐(0)
摘要:1.输出进制 cout.setf(std::ios_base::dec);//设为十进制 cout << 16 << endl;//打印十进制16 cout.setf(std::ios_base::hex);//设为十六进制 cout << 16 << endl;//打印10,没有0x前缀 cout 阅读全文
posted @ 2020-05-06 09:31 八转达人 阅读(413) 评论(0) 推荐(0)
摘要:C++官网:https://isocpp.org/ C++参考:https://zh.cppreference.com 1.列表初始化:用花括号初始化变量 特点:作用于内置类型的变量时,如果有丢失信息的风险,编译报错 int n1 = 10; //通常写法 int n2 = { 10 };//列表初 阅读全文
posted @ 2020-05-06 06:51 八转达人 阅读(176) 评论(0) 推荐(0)