C++学习
毅飞冲天@
这个作者很懒,什么都没留下…
展开
-
内联函数及其注意事项
default argument:是编译器记住了default argument,但是运行时还是要两个参数的编译器看到了原型声明:可以有default argument值,所以编译器替你补上了建议:不要使用default argument,很不安全,和设计者的意图不一样 前面加了inline的函数:只是一个声明,而不是一个定义(嵌入到代码里面,以空间换时间)(省去了overhead的部分(堆栈里面...原创 2018-05-10 21:50:20 · 754 阅读 · 0 评论 -
STL(标准模板类库)简介
STL:标准模板类库map:集合vector:矢量(C++中叫做容器)list:表 迭代器:广义指针vector类的运用:#include <iostream>#include <vector>using namespace std;int main(){ vector<int> x;//运用容器类的例子 for(int a=0;a&l...原创 2018-06-06 12:31:24 · 1321 阅读 · 0 评论 -
流的基本概念
cin:标准输入cout:标准输出cerr:标准错误clog:标准日志 也可以用get()函数来读东西set:置1reset:置0istream&operator>>(istream is,T& obj){ return is;}//create a stream insertostream&operator<<(ostream&...原创 2018-06-06 12:28:14 · 300 阅读 · 0 评论 -
C++中的异常
异常:预料到会发生,但是不一定会发生,程序有返回值,用来检验是否运行正确异常机制:Exception:最大的好处就是有清晰的错误处理代码,把业务逻辑和错误处理分开了在堆里面:有且只有new出来的东西在全局数据区里:全局变量、静态本地变量、静态成员变量在堆栈里:本地变量异常:就是由于外部条件的原因,有可能会抛出错误三种try和catch的形式:void outer(){ try{ ...原创 2018-06-05 21:46:35 · 154 阅读 · 0 评论 -
运算符的重载——原型
#ifndf _VECTOR_H_#define _VECTOR_H_class Vector{ public: Vector(int size):m_size(size){ m_array = new int[size]; } ~Vector(){ delete m_array; ...原创 2018-05-29 19:43:32 · 1306 阅读 · 0 评论 -
virtual函数和动态绑定
用指针和引用才会调用virtual,当用“.”时是引用不了的类里面有一个virtual函数,那么它的析构函数必须是virtual的,不然的话就会有麻烦静态绑定比动态绑定快很多C++:默认是静态的,追求效率其它的OP语言:则是动态的 子类返回一个对象本身是不行的,要通过指针和对象的引用...原创 2018-05-29 19:38:40 · 382 阅读 · 0 评论 -
造型和多态性
C++:造型:还是子类的对象(学生还是学生,只是看待的眼光变了,当做人看了)cast:叫做造型,数据没变,数据没有丢upcast:拿一个子类对象当做父类对象来看待C:类型转化 多态性(polymorphism): 只要前面的父类是virtual,后面继承的就都是virtual,但是每个地方都写上virtual是一个好的习惯 Dynamicbinding(动态绑定):运行时发生的...原创 2018-05-29 19:35:16 · 207 阅读 · 0 评论 -
C++:类型转换
在一个类里面,用X::operator double() const{}//意思是把类里面的东西变成double类的 通常有个const用来保证不会修改自己 尽量用自己写的函数来进行类型转化,自动的往往容易错,自己写的一眼就能够看出来。//举个例子class Orange;class Apple{public: operator Orange() const;};class ...原创 2018-06-04 21:12:11 · 305 阅读 · 0 评论 -
运算符重载
class Integer{ public: Integer(int n=0):i(n){} const Integer operator+(const Integer& n)const{ return Integer(i + n.i); } private: int i;};原创 2018-05-29 11:15:44 · 201 阅读 · 0 评论 -
C++:静态成员
写在class里面的,都是声明,就是说,告诉编译器有这么一个东西,都是不知道在哪,而不是definition(定义就会具体告诉函数的相关信息)。对于C++来说,函数本来就是全局的,函数又不跟着对象走。不能在一个静态的函数里面,使用了一个非静态的成员变量。静态函数只能对静态的函数进行操作。每个函数里面都有一个this,表示调用这个函数的那个对象,掉用静态函数也可以用A::say(0),这种方式来调用...原创 2018-05-29 11:16:24 · 177 阅读 · 0 评论 -
引用(reference)(int& y = x)
引用: 一个是给变量赋值,一个是把两个变量绑在一起(int& y)(实质上就是Y就是X的另外一个名字)只能改x的值,不能通过该y的值来改y reference:必须依赖某个变量,是其它变量的“别名”(婚姻是永久的,不能指向别人) pointers:可以为空,独立的reference:其实就是用指针实现的,目的就是为了减少指针的使用,美观没有reference的reference,这样...原创 2018-05-14 21:58:01 · 545 阅读 · 0 评论 -
C++:继承关系及子类父类
组合:用已有的对象拼成一个对象继承(inheritance):用类做出一个新的类(抽象的) interface:接口(指的是这个类对外界公开的那部分) 在构造函数之后一定要初始化,注意:不是赋值! 父类私有的东西,在子类中是存在的,但是不能够碰protected:让子类能够操作,别人不能够操作,通过它能够进行对父类private的访问良好的习惯: 写类的时候,写public时,先写构造函数...原创 2018-05-06 23:27:03 · 1210 阅读 · 0 评论 -
const注意事项
const:在C++中:编译器说,你说它是const,我就保证你永远不会去修改它*在谁前面,谁就是const 代码段中的东西,是不可写的,相当于constMMU(内存管理单元):会做一种内存保护,代码段是不能写的用数组表示的话:“=”的话就是一种拷贝了Const的必要性:有的时候传地址比传指针要省事很多,要省很大空间和拷贝,都是如果没有const,就不放心别人会不会修改你这个变量,保证它是安全的数...原创 2018-05-12 21:26:50 · 239 阅读 · 0 评论 -
C++:访问限制及初始化
private:是对类来说,不是和对象来说(对象还是以访问的:同一类)private:仅仅在编译时刻起作用,运行时候把手伸进去,依然可以访问到private里的东西(相当于:你我是亲戚,你的口袋里的钱是我的,我的也是你的) Friend.cpp:C++一旦声明是朋友之后,就可以访问你的private里的东西 struct X:有一个前项声明,使编译能够通过。 有些运算符的重载需要friend来授...原创 2018-05-05 20:37:56 · 358 阅读 · 0 评论 -
构造与析构
构造函数(constructor):产生条件:当对象要被创建时C++语言:是不会主动去帮你清理内存的(为了提高效率),java的话就会自动清理构造函数的特点:(1)名字和类的名字相同 (2)没有返回值(可以给参数)用大括号括起来的:表示进去的话变量就存在,一出来就没有了 析构函数(destructor):产生条件:当对象要被消灭时(不能够给参数),消除空间形式:在构造函...原创 2018-05-04 21:51:40 · 841 阅读 · 0 评论 -
构造函数的缺省
空间一开始就分配了,构造函数是要等到运行到那一行才会运行default:缺省(也就是默认)default constructor:自己写的、或者编译器给的没有参数的构造函数当定义一个数组有两个参数:第一个参数初始化了,第二个没有,就会告诉编译器,要它弄个没有参数的构造函数,然后就会报错(编译器说没有):最要命的就是,它会报各种要你补全其它答案的提示,不会说到重点...原创 2018-05-04 21:50:44 · 1023 阅读 · 0 评论 -
动态内存分配:C++
分配:new(先new申请空间,然后再初始化) 例如:new int,new Stash(首地址以及占多大空间) 会有一张表记录下来,如下:(记录地址和多大) 删除:delete(先调用析构函数,空间然后被收回) 例如:delete p,delete[]p如果没有释放内存的话,有可能就会内存泄漏(后果会很严重)malloc和free用的机制是一...原创 2018-05-04 21:46:57 · 180 阅读 · 0 评论 -
C++:成员变量
变量:成员变量:在一个函数内部定义的变量,值与函数无关,作用域在类的内部。在每一个类的对象里面。本地变量:值与函数有关,作用域在函数内部同名时:则按照“就近原则”,所有函数里都可以直接使用成员变量,在类的任何函数里都可以直接用函数:field:字段,也就是类的成员变量声明:只是告诉别人有这么一个东西,不告诉别人在哪extern:用在变量和函数的声明前,说明“此变量/函数是在别处定义的,要在此处引用...原创 2018-05-04 17:39:43 · 3763 阅读 · 0 评论 -
C++中的模板(template)
编译器对声明只做一件事情:记录下来编译器一个时间只能够编译一个单元。template <class T>//把函数做成模板void swap(T& x,T& y){ T temp = x; x = y; y = temp;}template <class T>class Vector{public: Vector(...原创 2018-06-06 12:41:06 · 197 阅读 · 0 评论