c++
tuuzkiii_Tuu
这个作者很懒,什么都没留下…
展开
-
c++ | cast
父转子不安全的原因:子类的成员/方法往往比父类多,假如原父指针指向父类对象,强制转换成子类指针时,调用子类的方法,但父对象中是没有这个方法的,会出问题。1. 用于含虚函数的父类和子类的转换,主要用于父类转子类。但是,对声明为const的变量来说,常量就是常量,任你各种转化,常量的值就是不会变。函数的形参不是const,且函数不会改动参数值,则使用const_cast。原理是,直接把数据类型A的地址解释成另一个数据类型B的地址,逐个比特复制。3. 子类与父类的转换(子类转父类安全,父类转子类不安全)原创 2022-09-27 17:27:22 · 352 阅读 · 0 评论 -
c++ | 左值引用 & 右值引用
1、替代需要销毁对象的拷贝,提高效率:某些情况下,需要拷贝一个对象然后将其销毁,如:临时类对象的拷贝就要先将旧内存的资源拷贝到新内存,然后释放旧内存,引入右值引用后,就可以让新对象直接使用旧内存并且销毁原对象,这样就减少了内存和运算资源的使用,从而提高了运行效率;注意:c不可以引用 const a*3,const c 可以引用 const a*3,但是有无const的 a 都不行!注意:b不可以引用const a,但const b 可以引用 const a,也可以a*3, 也可以const a*3。....原创 2022-08-09 22:11:04 · 423 阅读 · 0 评论 -
c++ | 关于STL
map: mp1, mp2, 可以mp2 = mp1;string: s.substr(pos, len);原创 2021-12-29 21:06:57 · 130 阅读 · 0 评论 -
c++ | 智能指针
将普通的指针封装为一个栈对象。当栈对象的生存周期结束后,会在析构函数中释放掉申请的内存,从而防止内存泄漏。auto_ptr(已经弃用)auto_ptr<string> p1 (new string ("aaa)); auto_ptr<string> p2; p2 = p1; // 不报错unique_ptr“独占”所指向的对象 是auto的改进unique_ptr<string> p1 (new string ("aaa")); uniqu原创 2022-03-31 20:57:31 · 1059 阅读 · 0 评论 -
c++ | 析构函数与异常 | 「将异常锁在析构函数里」
问题描述c++不喜欢析构函数吐出异常,但一个自定义析构函数又不得不执行某个可能失败的动作。举个例子:某个数据库类class DataBase{public: static DataBase create(); ... void close();};提问:为啥要static.....为了确保用户调用了函数close,于是定义一个把close写在了析构函数里:...原创 2021-12-23 17:11:03 · 768 阅读 · 0 评论 -
c++ | 补基础 | static与const
const:常量,即赋值后不可以被改变static:静态xxx1. 修饰全局变量只能在当前文件可见。所以不同文件中可以定义同名的static全局变量2. 修饰局部变量使局部变量的生存周期从函数结束延长到程序结束3. 修饰函数同14.修饰类成员变量使其成为静态成员变量,该类所有对象这个数据成员都只有一个实例5.修饰类成员方法使其为静态成员方法,只能访问它的参数、类的静态数据成员和全局变量呜呜竟......原创 2021-12-22 21:40:19 · 143 阅读 · 0 评论 -
c++ | 虚析构函数 | 「一个类若包含virtual函数,则析构函数也应声明为virtual」
关于析构函数可能出现的问题定义一个基类和两个派生类:class Time { // 基类public: Time(); ~Time(); ...};class Clock: public Time {...};class Watch: public Time {...};设计一个工厂函数:啥叫工厂函数:返回一个基类的指针,指向一个新生成的派生类对象。为啥要用工厂函数:使用者不关心实现细节,只想使用时间。Time* getTime(); /原创 2021-12-22 18:41:44 · 201 阅读 · 0 评论 -
c++ | 补基础 | 多态、继承、虚函数、抽象类
基类通过继承,派生出好几个派生类shape类 -> circle类、rectangle类多态:调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。三个类都有求面积的函数,但circle对象和rectangle对象所调用的面积函数是各自的虚函数:在基类中使用关键字virtual声明的函数。shape类中求面积的函数要定义成虚的纯虚函数:基类中的虚函数不给实现virtual int area() = 0;...原创 2021-12-22 17:27:04 · 233 阅读 · 0 评论 -
c++ | 初始化2 | 「用local static对象替代non-local static对象」
前置知识点:staticstatic定义:生命周期从构造出来到程序结束为止static对象包括:global对象、定义在namespace里的、定义在函数里、class里的static对象。其中定义在函数里的static对象称为local static对象(局部静态对象)。其他为non-local static对象。正文开始定义一个源码文件中的类class AddressBook {public: ... int getNum() const; ...};原创 2021-12-20 15:10:38 · 768 阅读 · 0 评论 -
c++ | 初始化1 | 「构造函数用成员初值列」
拷贝构造简单的概念可以看前文c++ | copy构造 copy赋值 | 值传递_tuuzkiii_Tuu的博客-CSDN博客正文开始,核心:c++规定,成员变量的初始化在构造函数之前定义一个类:class Tel {..};class AddressBook {public: // 构造函数 AddressBook(const std::string& name, const std::list<Tel>& phone);priv原创 2021-12-20 14:12:22 · 298 阅读 · 0 评论 -
c++ | const(成员函数) | 「尽可能多用const,如成员函数」
class TextBlock{public: ... const char& operator[] (std::size_t pos) const { return text[pos]; // const 成员函数 } char& operator[] (std::size_t pos) { return text[pos]; //.原创 2021-12-13 19:02:13 · 683 阅读 · 0 评论 -
c++ | const(基础用法)
const .... * 被指物是常量 const Widget* p=Widgetconst * p... *const ...指针是常量 Widget* const pconst ... * const ...都是常量对于stl:std::vector<int> vec;conststd::vector<int>::iterator iter1 = vec.begin();std::vector<int>::const_...原创 2021-12-09 20:52:54 · 278 阅读 · 0 评论 -
c++ | const(类专属常量) | enum
class Widget { // 这个放在头文件里private: static const int TotalNum = 5; // 注意static int arr[TotalNum]; ...};const int Widget::TotalNum; // 这个放在实现文件里 // 注意没有赋值解读:因.原创 2021-12-09 14:17:32 · 911 阅读 · 0 评论 -
c++ | 「用const/enum替代宏 #define」
#define THIS_YEAR 2021宏不一定会被编译器看到,也就是说THIS_YEAR不一定会被放入符号表,因此在debug的时候错误信息可能只提到2021而不提到THIS_YEAR,对于很长的.h来说就很难定位。更好的解决方法:用常量const int ThisYear = 2021;特殊情况:见其他包含const的文章...原创 2021-12-09 13:56:35 · 371 阅读 · 0 评论 -
c++ | c++的次语言
c++的构成:1. c 数组、指针、语句.......2. 面向对象c++ 类、封装、继承、多态、虚函数......3. template c++ 泛型编程的部分 待续..4. stl不同part守则也不同如c类型,pass-by-value比pass-by-reference好;面向对象c++/template c++,由于存在用户自定义的构造函数与析构函数,pass-by-reference-to-const更好;对stl而言,仍...原创 2021-12-09 13:44:13 · 184 阅读 · 0 评论 -
c++ | 构造、拷贝构造、赋值、析构 | 「亲自定义private构造函数来拒绝编译器提供的default函数」
它定义了值传递 pass by value拷贝构造函数用于,以同型对象初始化自我对象(?)拷贝赋值运算符用于,从一个同型对象中拷贝它的值到自我对象class Widget{public: Widget(); Widget(const Widget& rhs); // 拷贝构造函数 Widget& operator=(const Widget& rhs); // 拷贝赋值运算符 ... };原创 2021-12-07 21:14:27 · 342 阅读 · 0 评论 -
c++ | explicit 关键字
explicit用于修饰只有一个参数的构造函数, 作用:表明该构造函数是显示的class Tmp{public: Tmp(); // 1 Tmp(int a); // 2 Tmp(int a, int b); // 3 Tmp(int a, int b=10, int c=1); // 4 ~Tmp();priv原创 2021-12-07 19:42:28 · 189 阅读 · 0 评论 -
c++ | 补基础 | template
定义一个类模板GraphNode:template<typename T_1, typename T_2>class GraphNode{public:GraphNode(); ~GraphNode(); T_1 getLen(); T_2 getRad(); void setLen(T_1 l); void setRad(T_2 r); ...private: T_1 len; T_2 rad;...原创 2021-12-06 17:54:43 · 398 阅读 · 0 评论