07 2021 档案

摘要:假设我们写了一个有理数类,并支持其中的*重载 class Rational { public: Rational(int numerator = 0, int denominator = 1); int numerator() const; int denominator() const; cons 阅读全文
posted @ 2021-07-04 16:30 Destiny233 阅读(47) 评论(0) 推荐(0) 编辑
摘要:RAII(Resource Acquisition is Initialization)意思是资源取得的时间是初始化时机。怎么理解呢,比如说我们new出了一块动态内存,就应该立刻放入智能指针中;申请了一个数据库链接,就应该立刻放入数据库管理对象中。因为我们需要这些资源管理对象帮助我们自动释放这些资源 阅读全文
posted @ 2021-07-04 16:00 Destiny233 阅读(102) 评论(0) 推荐(0) 编辑
摘要:复制对象会用到两个函数,我们将下面两个函数统称为复制函数。 复制构造函数 赋值运算符 编译器不会提醒你忘了复制哪些东西 如果我们自己没有实现,则编译器会帮我们实现。编译器的实现会复制所有的 成员变量。 如果我们自己实现了,也一定要像编译器一样复制所有的成员变量。但如果你忘了某一个,编译器也不会提醒你 阅读全文
posted @ 2021-07-04 15:34 Destiny233 阅读(47) 评论(0) 推荐(0) 编辑
摘要:接口需要传什么参数 例如一个日期类 class Date { public: Date(int month, int day, int year); }; 年月日是三个必要数据,不同国家年月日的排列不同。所以这个是有歧义的。解决方法是设计年月日三个类,并且不让隐式转型。 class Month{ p 阅读全文
posted @ 2021-07-03 19:19 Destiny233 阅读(28) 评论(0) 推荐(0) 编辑
摘要:看下面这个例子 class Rational{ public: Rational(int numerator = 0, int denominator = 1); private: int n, d; friend const Rational operator* (const Rational& 阅读全文
posted @ 2021-07-03 19:17 Destiny233 阅读(31) 评论(0) 推荐(0) 编辑
摘要:考虑下面这个列子,我们定义了一个浏览器类。现在我们希望清理这个浏览器,一共需要清理三个东西,所以有3个成员变量。现在我们想将这三个东西放在一个函数里。有两种解决方法,一个是放在成员函数里,一个是放在普通函数里。哪个封装性更好? class WebBrowser{ public: void clear 阅读全文
posted @ 2021-07-03 17:09 Destiny233 阅读(95) 评论(0) 推荐(0) 编辑
摘要:程序员在调用对象的方法时不需要犹豫要不要打“()”,因为只有方法才是可见的,所以必须都打。 用可见的成员方法对数据进行操作,可以控制访问属性。比如如果我只想读,就可以将函数设置成const,这样用户试图写就会出错。 封装性,如果日后需要修改某一变量,或者替换。用户压根就不会知道这件事。 第三点非常重 阅读全文
posted @ 2021-07-03 16:48 Destiny233 阅读(48) 评论(0) 推荐(0) 编辑
摘要:检测错误 强化效能 收集动态分配内存之使用统计信息 增加分配和归还的速度 降低缺省内存管理器带来的空间额外开销 为了弥补缺省分配器中的非最佳齐位 将相关对象成簇集中 增加一些非传统行为 主要都跟操作系统相关,为了优化程序的性能。针对某些特定的情况下的优化。 阅读全文
posted @ 2021-07-03 16:27 Destiny233 阅读(31) 评论(0) 推荐(0) 编辑
摘要:考虑下面这段代码 // preliminary int priority(); class Widget{}; // call function 'doSomething' doSomething(shared_ptr<Widget>(new Widget), priority()) 在执行调用语句 阅读全文
posted @ 2021-07-03 16:25 Destiny233 阅读(32) 评论(0) 推荐(0) 编辑
摘要:新类型的对象如何被创建和销毁。涉及到构造函数,析构函数,new和delete 新类型的对象初始化和赋值有什么差别。涉及到构造函数和赋值运算符 如果新类型的对象以值传递意味着什么。涉及到复制构造函数 什么是合法值。涉及到成员变量的限定。比如一个表示月份的类,其值不应该超过12 新类型的对象需要配合某个 阅读全文
posted @ 2021-07-03 16:23 Destiny233 阅读(32) 评论(0) 推荐(0) 编辑
摘要:看个例子 class Person { public: Person(); virtual ~Person(); private: std::string name; std::string address; }; class Student: public Person { public: Stu 阅读全文
posted @ 2021-07-03 16:07 Destiny233 阅读(32) 评论(0) 推荐(0) 编辑
摘要:new失败了会发生什么 当用new来申请一块内存的时候,如果申请失败了,编译器会抛出一个异常(新式)或者返回一个null(旧式)。 在抛出异常或者返回null之前,编译器会先调用一个new_handler的方法,可以理解为错误处理函数。 namespace std { typedef void (* 阅读全文
posted @ 2021-07-03 14:48 Destiny233 阅读(47) 评论(0) 推荐(0) 编辑
摘要:题目 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。 不要给另外的数组分配额外的空间,你必须**原地修改输入数组**、使用 O(1) 的额外空间解决这一问题。 你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。 示例 1: 输入:["h" 阅读全文
posted @ 2021-07-02 15:49 Destiny233 阅读(38) 评论(0) 推荐(0) 编辑
摘要:这样做是为了能连等于,下面是个例子。 class Number{ public: Number& operator=(int num){ number = num; return *this; } private: int number; }; int main() { Number a, b, c 阅读全文
posted @ 2021-07-02 14:25 Destiny233 阅读(38) 评论(0) 推荐(0) 编辑
摘要:有些API接口必须要原始的指针而非只能指针怎么办呢。有两个解决方法 get 隐式转换 举个例子,假如我们有以下类。 class FontHandle{}; void releaseFont(FontHandle fh); class Font { public: explicit Font(Font 阅读全文
posted @ 2021-07-02 14:23 Destiny233 阅读(45) 评论(0) 推荐(0) 编辑
摘要:假设我们现在设计一个管理投资的类。它有很多个派生类负责不同的投资,我们使用工厂函数构造它的派生类。这涉及到一些工厂方法模式,这里我们不细说。只需要知道这个工厂方法返回一个父类指针,但他指向的是子类的对象。 class Investment{} Investment* createInvestment 阅读全文
posted @ 2021-07-02 13:37 Destiny233 阅读(37) 评论(0) 推荐(0) 编辑
摘要:我们先看下面两行代码 std::string* stringArray = new std::string[100]; delete stringArray; 这里我们先new了一个string数组,然后又把这个数组删除了。但是delete没有用[],发生了内存泄露。 这个内存泄露可能跟我们理解上有 阅读全文
posted @ 2021-07-01 20:52 Destiny233 阅读(41) 评论(0) 推荐(0) 编辑
摘要:Effective C++ 条款11:在operator=中处理自我赋值 潜在的自我赋值 // 1 a[i] = a[j]; // i = j // 2 *px = *py; // py和px指向同一对象 // 3 class Base{}; class Derived: public Base{} 阅读全文
posted @ 2021-07-01 20:41 Destiny233 阅读(76) 评论(0) 推荐(0) 编辑
摘要:构造一个派生类对象需要从基类开始构造,先构造了基类才有派生类。然而,我们 希望派生类在构造其基类部分的时候使用派生类所实现的方法。 根据多态的思想,我们可能在基类中写一个虚函数。然后在基类的构造函数中调用这个虚函数。这样似乎派生类在构造基类部分的时候,就可以通过这个虚函数调用自身实现的版本。但实际上 阅读全文
posted @ 2021-07-01 15:08 Destiny233 阅读(43) 评论(0) 推荐(0) 编辑
摘要:题目 给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。 你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。 示例网站上看吧。 注意: 合并必须从两个树的根节 阅读全文
posted @ 2021-07-01 12:14 Destiny233 阅读(33) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示