C/C++
猴塞雷咩
本科,软工,大三
展开
-
常量指针与指针常量的区别(转载)
常量指针与指针常量的区别(节选)一) 常量指针 指针指向的对象是常量,那么这个对象不能被更改。在C/C++中,常量指针是这样声明的:1)const int *p;2)int const *p;常量指针的使用要注意,指针指向的对象不能通过这个指针来修改,可是仍然可以通过原来的声明修改,也就是说常量指针可以被赋值为变量的地址,之所以叫做常量指针,是限制了通过这个指针修改变量的值。例如:int a =转载 2016-04-04 15:27:57 · 239 阅读 · 0 评论 -
拷贝构造函数
当类的对象需要拷贝时,拷贝构造函数将会被调用。以下情况都会调用拷贝构造函数: 1. 一个对象以值传递的方式传入函数体 2. 一个对象以值传递的方式从函数返回 3. 一个对象需要通过另外一个对象进行初始化。如果在类中没有显式地声明一个拷贝构造函数,那么,编译器将会自动生成一个默认拷贝构造函数,该构造函数完成对象之间的位拷贝。位拷贝又称浅拷贝。自定义拷贝构造函数是一种良好的编程风格,它可以阻止原创 2016-10-05 17:47:04 · 269 阅读 · 0 评论 -
友元函数和友元类
授予非公有成员的访问权。只能出现在类定义的内部。不是类成员,不受其声明出现部分访问控制影响。友元关系是授予的、不对称的、会破坏封装class X{ // ... friend void g(); friend class Z; // ...};原创 2016-10-05 17:53:19 · 178 阅读 · 0 评论 -
单例设计模式——singleton
保证在应用程序中,一个类只有一个对象将构造函数设置为私有,在类的实现中确保生成对象的个数class Singleton{public: static Singleton* getInstance(); // 获取句柄 void doSomething(); void destroy(); // 销毁private: Singleton(); // 私有构造函数原创 2016-10-05 18:26:29 · 234 阅读 · 0 评论 -
运算符重载
为了提高程序的可读性。如果一个类没有提供赋值运算函数,则默认提供一个。如果一个类提供了拷贝构造函数,那么也要提供一个重载的赋值运算函数。赋值运算符重载传入const引用 1. 检查自赋值 2. 释放原有的内存资源 3. 返回本对象的引用参数不能都是内部类型成员函数C++规定,=、()、[]、->这四种运算符必须为成员形式。RMB operator+(const RMB&);友元函数friend原创 2016-10-06 15:59:47 · 270 阅读 · 0 评论 -
String类的实现
class String{public: String(const char* = NULL); // 构造函数 ~String(); // 析构函数 String(const String&); // 拷贝构造函数 String& operator=(const String&); // 赋值运算符 String& operator=(const char*)原创 2016-10-06 16:48:45 · 379 阅读 · 0 评论 -
effective c++ 读书笔记
条款1:尽量用const和inline而不用#define以const行使常量折叠,用inline代替常用操作的宏定义,而且库里面有很多常用函数可用。当然不能抛弃宏,宏还是很有用滴。偶最近才发现宏的可爱之处。。。咔咔。条款2:尽量用而不用iostream的IO智能,灵活,类型安全。呃,效率要比stdio的IO低些。条款3:尽量用new和delete而不用malloc和freenew/delete是转原创 2016-10-19 17:00:35 · 182 阅读 · 0 评论 -
C++继承
面向对象封装 encapsulation继承 inheritance多态 polymorphism类之间关系is-a 继承体现has-a 组合体现继承的意义代码重用体现不同抽象层次公有继承class Teacher: public Person{};##私有继承##多重继承原创 2016-10-07 17:41:22 · 177 阅读 · 0 评论 -
83. Remove Duplicates from Sorted List(LeetCode)
Given a sorted linked list, delete all duplicates such that each element appear only once. For example, Given 1->1->2, return 1->2. Given 1->1->2->3->3, return 1->2->3./** * Definition for原创 2016-11-10 17:06:25 · 301 阅读 · 0 评论 -
343. Integer Break(LeetCode, C++, 动态规划)
Given a positive integer n, break it into the sum of at least two positive integers and maximize the product of those integers. Return the maximum product you can get.For example, given n = 2, return 1原创 2016-11-09 18:17:51 · 450 阅读 · 0 评论 -
Bigint Multiplication:大数乘法(hihoCoder C++)
Bigint Multiplication时间限制:10000ms 单点时限:1000ms 内存限制:256MB描述Given 2 nonnegative integers a and b, calculate a × b.输入One line with 2 integers a and b separated by a single space.0 ≤ a, b ≤ 10100.输出The v原创 2016-11-09 17:19:21 · 721 阅读 · 0 评论 -
多态
虚函数与抽象类可以用纯虚函数阻止生成对象。virtual void f() = 0;接口类:有纯虚函数必须为多态基类声明virtual析构函数构造函数不能是virtual函数。否则通过基类指针释放子类对象时会造成内存泄漏。原创 2016-10-07 23:21:46 · 194 阅读 · 0 评论 -
C++ const关键字
const出现在*左边,表示被指物是常量。const出现在*右边,表示指针自身是常量。const数据成员必须使用成员初始化列表进行初始化。class A{public: A(); ~A();private: const int val;};A::A() :val(0) //初始化列表{}const成员函数不能修改数据成员class Foo{public原创 2016-10-04 17:19:00 · 183 阅读 · 0 评论 -
动态内存分配
C语言:malloc/free函数内存区域data area:全局变量、静态数据、常量code area:所有类成员函数和非成员函数代码stack area:为运行函数而分配的局部变量、函数参数、返回数据、返回地址等heap area:动态内存分配区C++:new/delete运算符在堆上生成对象,需要自动调用构造函数释放时自动调用析构函数new/delete配对使用new[]/d原创 2016-10-04 15:42:20 · 417 阅读 · 0 评论 -
C++ static类成员
静态数据成员在类外分配空间和初始化。在static成员函数中不能使用this指针。即使没有实例化对象也可以使用。名字在类的作用域中,可以避免与全局变量冲突。可以实施封装,作为私有成员。原创 2016-10-04 15:28:09 · 227 阅读 · 0 评论 -
数组与指针
数组名单独使用,实际上代表了数组的起始地址。访问第一个元素:*list 访问第二个元素:*(list + 1)假设list地址为1000, 则list+1的值1000+sizeof(int)。memset的使用(转)在初始化数组尤其是需要每次都初始化的时候,很多同学使用循环来进行,这样不但速度慢,而且写起来也很长。所以现在提供一个函数来实现这个功能。。。原型:extern void *memset原创 2016-04-04 15:50:41 · 217 阅读 · 0 评论 -
空指针与函数指针
空指针 void pointers指针void 是一种特殊类型的指针。void 指针可以指向任意类型的数据,可以是整数,浮点数甚至字符串。唯一个限制是被指向的数值不可以被直接引用(不可以对它们使用引用星号*),因为它的长度是不定的,因此,必须使用类型转换操作或赋值操作来把void 指针指向一个具体的数据类型。它的应用之一是被用来给函数传递通用参数:// integer increaser#incl转载 2016-04-10 17:36:20 · 4189 阅读 · 0 评论 -
C++输入输出
#include <fstream>TEXT I/Oofstream output;output.open("output.txt");// some operationoutput.close(); // close the fileTEST FILE EXISTENCEinput.fail()TEST EOFwhile(!input.eof()) { input >> number原创 2016-04-06 17:03:45 · 283 阅读 · 0 评论 -
C++强制类型转换
对于传统的转换方式(C式或函数式),只在数值类型(包括整型、浮点型、字符类型和枚举)上使用。这也是延续C的形式,当然这类转换也是可以用static_cast来替换,但是因为是基本类型,所以传统转换已经很直观。 对于const_cast转换运算符,用在需要去除掉const限定的时候。其实这种情况出现的很少,可能的方法在const_cast一文中已经又举例,不过还是反复强调, 使用const_转载 2016-05-22 16:05:23 · 400 阅读 · 0 评论 -
C++多重继承
歧义(Ambiguity)即使只有一个可取用,仍会发生(如一个public一个private)。必须明白指出要调用哪一个函数(如:derived.Base1::f( ))。钻石型多重继承模糊调用,导致编译错误。使用virtual base class解决。原创 2016-05-28 17:07:33 · 227 阅读 · 0 评论 -
C++智能指针
C++智能指针auto_ptrshared_ptrweak_ptrscoped_ptrauto_ptrauto_ptr是现在标准库里面一个轻量级的智能指针的实现,存在于头文件 memory中,之所以说它是轻量级,是因为它只有一个成员变量(拥有对象的指针),相关的调用开销也非常小。get,获得内部对象的指针release,放弃内部对象的所有权,将内部指针置为空reset,销毁内部对象并转载 2016-05-22 21:44:19 · 300 阅读 · 0 评论 -
设计模式(一):创建型模式
设计模式(一):创建型模式创建型模式(Creational Pattern)对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离。为了使软件的结构更加清晰,外界对于这些对象只需要知道它们共同的接口,而不清楚其具体的实现细节,使整个系统的设计更加符合单一职责原则。创建型模式在创建什么(What),由谁创建(Who),何时创建(When)等方面都为软件设计者提供了尽可能大的灵活性。创建原创 2016-10-26 02:38:39 · 259 阅读 · 0 评论 -
mutable和volatile
mutable为了突破const的限制。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中,甚至结构体变量或者类对象为const,其mutable成员也可以被修改。保护类的成员变量不在成员函数中被修改,是为了保证模型的逻辑正确,通过用const关键字来避免在函数中错误的修改了类对象的状态。并且在所有使用该成员函数的地方都可以更准确的预测到使用该成员函数的带来的影响。而mut转载 2016-10-17 17:29:28 · 2076 阅读 · 0 评论 -
C++函数重载与extern "C"
C++支持函数重载,符号表里的名字并不是函数名。 若C++使用C头文件,会找不到具体函数(C不支持函数重载)。C头文件应该这样写:#ifdef __cpluscplus extern "C" { #endif //some code #ifdef __cplusplus } #endif 如果C头文件已经写了,可以这样:extern "C" { #include "tes原创 2016-10-02 17:16:57 · 311 阅读 · 0 评论 -
C++内联函数
在类中定义的成员函数(C++允许在其他地方定义成员函数)一般为内联函数,即使没有明确用inline标示。只需在最初的定义处标示一次inline。不能包含switch…case等。原创 2016-10-03 17:40:45 · 157 阅读 · 0 评论 -
explicit构造函数
explicit构造函数可以防止隐式转换原创 2016-10-04 15:16:41 · 178 阅读 · 0 评论 -
372. Super Pow(LeetCode)
Your task is to calculate ab mod 1337 where a is a positive integer and b is an extremely large positive integer given in the form of an array.Example1: a = 2 b = [3] Result: 8Example2: a原创 2016-11-10 17:30:32 · 275 阅读 · 0 评论