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

浙公网安备 33010602011771号