(C++系列01)c++基础(持续更新...)
文章平均质量分 71
成都fly
这个作者很懒,什么都没留下…
展开
-
【内存】内存泄露
内存泄露 int *pVal = new int; *pVal = 89; pVal = new int; *pVal = 99;整型89所对应的区域被分配到了堆中,但是还没有释放,就将指针指向99所在的内存区域,这样无法去释放89所对应的内存释放,这也是内存泄露的原因之一。原创 2015-11-21 21:19:13 · 366 阅读 · 0 评论 -
高级多态(二):纯虚函数与抽象数据类型(ADT)
当你要创建几个类,分别表示矩形,圆形,椭圆形等图形时,每一个类都会去实现获取面积(getArea()),绘制(draw())等通用接口,因此想到了继承。我们可以定义一个形状类Shape,但是Shape并不是一个实体,仅仅是抽象出来的概念,您也不想去创建Shape的对象,仅仅为了预定义同类的接口而已。此时就需要用到纯虚函数,Shape也被称为抽象数据类型ADT(Abstract Data T转载 2015-12-05 14:53:05 · 1139 阅读 · 0 评论 -
c++友元类及友元函数
友元函数类friendOfA可访问类RoadPersonA的私有成员iAge。(虽然提供了访问其他类私有成员的方法,但是破坏了数据安全性,慎用。)class RoadPersonA{public: RoadPersonA() { } ~RoadPersonA() { } friend class friendOfA;private: int iAge =原创 2015-11-23 20:46:30 · 367 阅读 · 0 评论 -
静态成员数据及静态成员函数:static
静态成员是属于类的,是多个对象共有的。1.静态成员数据class Dog {public: Dog(){ num++; }; ~Dog(){}; static int num ; int getNum(){ return num; }private:};int Dog::num = 0;//在类的外面对static数据初始化int _tmain(int argc, _T...转载 2015-12-05 16:11:49 · 307 阅读 · 0 评论 -
继承与多态(五):虚复制构造函数
由于构造函数不能是虚函数,然而,程序有时候非常需要通过传递一个指向基类对象的指针,创建派生类对象的备份。常见的解决方法是:在基类钟创建一个Clone()成员函数,并将其设置为虚函数。Clone()函数创建当前对象的备份,并返回该对象。转载 2015-12-05 14:20:25 · 1444 阅读 · 0 评论 -
继承与多态(三):使用虚函数实现多态
enum BREED{ Golden,Teddy,ChineseField};class Mammal{public: Mammal(){ cout << "Mammal Constructor!" << endl; } ~Mammal(){cout << "Mammal Destructor!" << endl;} virtual void speak() const {转载 2015-12-04 22:03:23 · 665 阅读 · 0 评论 -
继承与多态(四):虚析构函数
当指向派生对象的指针被Delete时,如果基类的析构函数是虚函数(应该如此),将执行正确的操作:调用派生类析构,调用基类析构。class Mammal{public: Mammal(){ cout << "Mammal Constructor!" << endl; } virtual ~Mammal(){cout << "Mammal Destructor!" << endl;}//需转载 2015-12-05 14:01:59 · 288 阅读 · 0 评论 -
函数指针
1.函数指针void square(int& refX, int& refY){ cout << "square..." << endl;}void cube(int& refX, int& refY){ cout << "cube..." << endl;}int _tmain(int argc, _TCHAR* argv[]){ void(*pFunc)(int&,转载 2015-12-05 16:43:04 · 665 阅读 · 0 评论 -
C++指针与引用(三):引用使用注意事项
1.不要返回不在作用域内的引用class TestSimple{public: TestSimple() { cout << "TestSimple Constructor..." << endl; }; TestSimple(TestSimple&); ~TestSimple() { cout << "TestSimple Destructor..." << en原创 2015-11-26 22:18:11 · 458 阅读 · 0 评论 -
使用new char[]遇到过的几个坑
new char[]使用起来很简单,也是最基础的语法,但是在使用过程中还是遇到很多坑。所以提醒自己,重视基础。1.释放 char *p = new char[1024 * 1024 * 100]; cout << "按任意键开始分配内存" << endl; getchar(); cout << "成功分配了100M的内存" << endl; if (p) { cout原创 2015-11-28 15:44:53 · 12952 阅读 · 1 评论 -
C++11新特性:function, bind和lambda
function, bind和lambda:http://blog.csdn.net/Augusdi/article/details/11771699bind中使用std::ref和std::cref,bind中默认使用的拷贝,而不是引用,根据实际情况,可使用std::ref和std::cref将参数设置为引用https://www.cnblogs.com/jiayayao/p/6527713.h...转载 2018-03-09 10:09:25 · 499 阅读 · 0 评论 -
c++ 11中emplace_back替代push_back的相关知识点,含右值引用,move用法等
C++11引入了右值引用,转移构造函数,push_back()右值时就会调用构造函数和转移构造函数(原来是调用拷贝构造,会为临时变量申请堆空间,影响程序效率,C++11以后为右值引用调用转移构造函数,不会为临时变量申请堆空间,而是直接赋值,提高程序效率)。 使用mplace_back替代push_back()可以在这上面有进一步优化空间,只调用构造函数不需要调用右值引用转移构造函数。如:reEle...转载 2018-03-02 10:38:35 · 1984 阅读 · 0 评论 -
高级多态(一):单继承存在的问题和dynamic_cast
Dog和Cat类是继承自Mammal类,用Mammal类指针分别指向子类对象,并调用虚函数(Speak()),可实现多态。但是问题来了,如果Dog类还有自己特有的成员,如:wagTail(),此时用Mammal类指针去调用会报错。当然如果把wagTail()成员放在Mammal类中,能够解决该问题,但是Cat类并不需要wagTail(),造成类继承混乱。此时可以使用dynamic_cast运算转载 2015-12-05 14:35:12 · 672 阅读 · 0 评论 -
继承与多态(二):重写函数
enum BREED{ Golden,Teddy,ChineseField};class Mammal{public: Mammal(){} Mammal(int newAge, int newWeight) :age(newAge), weight(newWeight) { cout << "Mammal Constructor!" << endl; } ~Mammal转载 2015-12-03 22:16:09 · 350 阅读 · 0 评论 -
C++程序员必须知道的5大内存区域
1.全局名称空间放置:全局变量。特点:全局变量在函数返回时,不会消失,整个程序都能访问它,这导致代码容易出BUG,更难以理解和维护。所以尽量放堆中能够解决该问题。2.堆(自由存储区)放置:除了其他区域的剩余区域。特点:1.可将堆视为大内存块,您必须保留这些内存块的地址,将其存储在指针钟,不再使用时丢掉。2.只有有权访问指针的函数才能访问它指向的数据,这提供了原创 2015-11-21 20:11:28 · 495 阅读 · 0 评论 -
指针那些事儿
1.野指针(也叫悬摆指针,迷失指针)野指针是导致BUG的罪魁祸首之一。对指针调用Delete后(释放掉了它指向的内存,野指针还是指向原来的地址),如果没有重新赋值就使用它,将导致难以预料的后果。因为此时操作野指针,它指向的内存地址可能已经分配给其他变量在使用了。所以指针在Delete之后,如果不再使用,一定要赋值Nullptr。2.const指针之一:指针本身是常量 or 指向原创 2015-11-22 10:05:46 · 308 阅读 · 0 评论 -
C++Template
输出结果:Result of Int:5Result of Double:5.2非类型形参templateclass TmpStack{public: TmpStack(); void push(T const &);//入栈 void pop();//出栈 T top() const; bool isEmpty()const //返回是否为空 { r原创 2015-11-17 13:58:19 · 353 阅读 · 0 评论 -
C++中的资源管理(一):构造自己的auto_ptr与shared_ptr智能指针
C++中指针管理是很频繁的事情,并且很容易出错。要是有方法可以简化这个过程,并减少出错就太棒了。下面提供了几个方法来实现:1.用类来管理指针class Car{public: Car(); ~Car(); void IncreaseGrade()//增加档位 { cout << "After IncreaseGrade,grade is:" << ++iGrade << e原创 2015-11-23 14:12:31 · 408 阅读 · 0 评论 -
C++指针与引用(一):函数传参,是该传对象,还是传指针,抑或是引用
class TestSimple{public: TestSimple(); TestSimple(TestSimple&); ~TestSimple();private:};TestSimple::TestSimple(){ cout << "TestSimple Constructor...!" << endl;}TestSimple::TestSimple(Te原创 2015-11-26 20:29:28 · 1403 阅读 · 0 评论 -
C++指针与引用(二):常用const指针,增强程序的健壮性
往函数传递指针,往往是很高效的,但是传入对象的地址,将对象暴露在被修改的风险之中,所以加上const是很好的习惯。class TestSimple{public: TestSimple(); TestSimple(TestSimple&); ~TestSimple(); void SetNum(int iNum) { num = iNum; } int GetNum()原创 2015-11-26 21:01:11 · 348 阅读 · 0 评论 -
C++拷贝构造函数
默认拷贝构造函数在大部分情况下,都可以正常运行。但是如果类里定义了堆内存的成员变量时,默认的拷贝构造函数不会给堆成员变量重新分配空间,造成两个对象的堆内存成员指向同一个内存块,如果其中一个对象释放了该内存块,另一个对象就会访问非法的内存。class TestSimple{public: TestSimple() { cout << "TestSimple Constructor..原创 2015-11-28 16:17:59 · 296 阅读 · 0 评论 -
C++运算符重载
1.重载++运算符class TestSample{public: TestSample() { }; ~TestSample() { }; void SetNum(int iNum) { num = iNum; } int GetNum() const { return num; } const TestSample& operator原创 2015-11-29 13:41:50 · 387 阅读 · 0 评论 -
c++任意数字转换为字符串
将任意的整数,浮点数转换为字符串templatestring ConvertAnyNumToString(T iValue){ string outPutStr, tmp; //1.判断正负,取正数 if (iValue < 0) { outPutStr.push_back('-'); iValue = -iValue; } //2.判断是int/long 还是dou原创 2015-11-21 16:34:41 · 893 阅读 · 0 评论 -
继承与多态(一):使用继承扩展类
enum BREED{ Golden,Teddy,ChineseField};class Mammal{public: Mammal(){} Mammal(int newAge, int newWeight) :age(newAge), weight(newWeight) { cout << "Mammal Constructor!" << endl; } ~Mammal转载 2015-12-03 22:01:35 · 368 阅读 · 0 评论 -
高级多态(三):复杂的抽象层次结构
现在需要设计一组类,实现:动物(Animal),哺乳动物(Mammal),鱼类(Fish),并且实现Dog类层次分析:Animal,Mammal,Fish,都是抽象数据类型(ADT);Mammal和Fish又分别继承自Animal;Dog继承自Mammal;类实现分析:Animal基类,可实现动物都具有的:吃(Eat),睡(Sleep),运动(Move),繁衍(Reprod转载 2015-12-05 15:29:05 · 881 阅读 · 0 评论 -
智能指针:unique_ptr、shared_ptr、weak_ptr
智能指针的原理是,接受一个申请好的内存地址,构造一个保存在栈上的智能指针对象,当程序退出栈的作用域范围后,由于栈上的变量自动被销毁,智能指针内部保存的内存也就被释放掉了(除非将智能指针保存起来)。一、auto_ptr:这是一个被c++11标准废弃的一个智能指针,unique_ptr可以看做是替代品。二、shared_ptr:shared_ptr使用引用计数,每一个shared_ptr的拷贝都指向相...转载 2018-03-12 10:22:55 · 631 阅读 · 0 评论