20170113C++阶段班03_Object C++_08-09语法复习/Object复习
2017-01-14 00:49
585 查看
Object C 复习:
1:语法部分
1:bool类型!原生C语言里面是没有提供的,作业1:bool,_Bool,BOOL的区别
2:int类型和bool类型可以互相转换。例如:int n = 3; bool b = n; n = b; 最终n为1
3:const:是将变量常量化,属于一个编译器的行为,只是编译器在语法上面对const的变量进行检测,但凡发现里面有人来修改就会报错!把const弄成失效有很多种方式!const_cast就可以!这个仅仅是编译器级别的常量,可以认为const为伪常量,如果在常量区的常量是无法被修改的,属于非编译器级别的,和define定义的属于真常量!const int i = 100;//保存位置视情况而定。const是一个具有类型的常量,相对#define,他是带有类型检测的。const在编译的时候,会分配空间,方便调试,他拥有作用域,宏不拥有作用域,他是全局的!整体上,const相对于宏易于调试,
4:enum:也可以定义常量,不分配空间,直接就是一个常数,是真常量。其实const就是给程序员看的,代表不可以修改这个变量,这就是const语义。学C++一定要弄清楚语义!否则很多地方都会弄不明白。
5:域作用符:1:命名空间。2:域运算符。3:不加前缀代表全局。
6:new/delete:运算符,malloc(函数)不会调用构造函数,new会调用构造函数,new也是运算符,可以被重载。
7:函数重载:返回值不同,不可以构成重载。重载与返回值无关。参数类型不同以及个数或者顺序的不同 可以构成重载。命名改编(name managling)。
8:另外,const版本和普通的是不可以构成重载!const在一个函数结尾的话只能在类里面,const函数只在类里面有用,外部是无法对函数进行const修饰的。一个类的里面如果const在函数前面,也不可以构成重载!因为const在前面只是返回值类型。函数的重载只和参数有关。在类里面,const在函数后面的函数是可以构成重载的!
9:二义性:类型可以被转换或者默认实参都可能造成二义性的问题,二义性就是对函数的调用不明确导致的。
10:引用:别名,作为参数使用的时候,传递的就是本身。返回局部变量的引用的话,出函数后,这个变量就没了。局部变量生命周期只在这个局部内。
11:类型转换:static_cast,const_cast……
12:inline:内联函数,与宏不同,他不一定展开。
2:Object:类与对象
1:类是抽象的,对象是实际存在的!
2:访问权限:public:公有的,private:私有的(外部无法访问),protected:保护的。
3:struct里面也可以用上面三个访问权限限制(仅限C++语言),但一般没使用过。
在C++里面,struct和class的区别在于默认访问权限。二者都可以来做相同的事情,抽象和封装。C语言有的,C++都有,但是有区别!
C++的struct也可以拥有成员函数!C语言的不可以!
struct MyStruct//C++下 { void Foo(){}//默认为公开的! public: int num; char s; private: int num1; char s1; }MyStruct;
可以认为class是struct的一个升级版本。
4:vs编译器包含了C和C++编译器。文件后缀决定使用的那个编译器来编译的。
5:默认构造函数是无参的,里面什么都没做。
6:一个类里面,默认生成的函数除了之前的六个之外,取址运算符*的默认函数还有一个const版本的,总共有七个默认的函数。七个函数分别为
构造函数,析构函数,拷贝构造函数,赋值函数,operator&(),operator*(),operator*()const。
7:重载函数的时候,调用函数直接传入小数,默认匹配到double去,float和int的重载会有二义性!
8:初始化列表:引用,const两种必须使用初始化列表才可以赋值。否则会报错。在初始化列表里面做相当于真正的初始化,与之对应的是计算列,他是先申请变量,然后赋值,初始化列是申请的时候就赋值了!详见博客20161230C++阶段班03_Object
C++03。
9:只需要传递一个参数的构造函数会编程转换构造函数,可以使用explicit禁止转换!如果转换构造函数不止一个,那么就可能要注意一下二义性的问题。
10:默认拷贝构造函数:传入参数是类对象引用,它里面默认做的浅拷贝,他的调用时期是在
1:传参的时候传的类对象(形参拷贝为实参)。
2:函数返回的时候,返回的类对象(返回拷贝的)。
3:申请类对象直接=本类对象的时候(Demo demo = demo1)。
11:运算符重载原则:
1:单目运算符重载为成员函数
2:双目运算符重载成友元函数(无论(类+变量)还是(变量+类)都可以调用,demo在前和在后都可以)
规则:.、=、()、[]、->,五个不可以重载为友元函数。
12:类型转换运算符:
相当于把类转换为其他类型的数据。
#include <iostream> class Demo { public: Demo(int num) :num_(num) { } operator int()//类型转换运算符!类->int。const版本的为 operator int() const; { return num_; } int getNum() { return num_; } private: int num_; }; int main() { Demo demo = 100; int num = demo;//如果为const int num = demo;那么要求类型转换运算也是const版本的! std::cout << num << std::endl; return 0; }
对new的重载有多种版本!
void* operator new(size_t size) { Demo = malloc(size);//先申请空间,再调用构造函数,delete是先调用析构函数,再示释放空间 } void* operator new(size_t size,const void* file){}//这个是使用已有空间的new,不再分配内存空间
相关文章推荐
- 20170113C++阶段班03_Object C++_08-09语法复习/Object复习
- 20170113C++阶段班03_Object C++_08-09语法复习/Object复习
- 20170113C++阶段班03_Object C++_08-09语法复习/Object复习
- 20170113C++阶段班03_Object C++_08-09语法复习/Object复习
- 20170113C++阶段班03_Object C++_08-09语法复习/Object复习
- 20170113C++阶段班03_Object C++_08-09语法复习/Object复习
- 20170113C++阶段班03_Object C++_08-09语法复习/Object复习
- 20170113C++阶段班03_Object C++_08-09语法复习/Object复习
- 20161230C++阶段班03_Object C++_03构造函数/命名空间/初始化列
- 20170101C++阶段班03_Object C++_04构造函数/赋值函数/拷贝构造/
- 20170111C++阶段班03_Object C++_06-07static与类/const与类
- 20170101C++阶段班03_Object C++_05运算符重载
- 20170101C++阶段班03_Object C++_05运算符重载
- 20170101C++阶段班03_Object C++_04构造函数/赋值函数/拷贝构造/
- 20170101C++阶段班03_Object C++_05运算符重载
- 20170111C++阶段班03_Object C++_06-07static与类/const与类
- 20170101C++阶段班03_Object C++_05运算符重载
- 20170101C++阶段班03_Object C++_04构造函数/赋值函数/拷贝构造/
- 20170101C++阶段班03_Object C++_05运算符重载
- 20170101C++阶段班03_Object C++_04构造函数/赋值函数/拷贝构造/