黑马程序员——自学c++1

来源:互联网 发布:怎么远程授权php 编辑:程序博客网 时间:2024/04/30 05:21

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

一.c++基础

1.面向对象的三大特征:封装,继承和多态。
2.默认的构造函数:(1)没有参数的构造函数(2)有参数,但参数有默认值
3.#include “文件名”:先在当前目录下寻找,找不到然后在系统目录下寻找
   #include<文件名>:只在系统目录下寻找
4.编译器为我们提供的默认构造函数:只为对象分配存储空间
5.如没有给类中的成员变量赋值,则默认值为0
6.当成员变量和参数名称相同时,可用初始化列表进行初始化,而无须改变他们的名称
7.当成员变量中有const变量时,必须使用初始化列表对改变亮进行初始化。
初始化列表与普通的在花括号中赋值的区别:
1)使用初始化列表是进行的初始化,不是赋值
2)在花括号中是赋值,不是初始化


8.重载下标运算符,必须重载为成员函数
有两种版本:1)const版本:const int& operator[](int index) const 其中返回值中得const是为了保证返回以后不能作为左值对他进行赋值;最后面的const说明这是一个const成员函数,const对象是可以调用这个版本的。
2)非const版本:in& operator[](int index)
9.类中有数组作为数据成员,当这个类的对象赋值给另一个对象时,类中的数组进行的时深拷贝。而在c语言中是不允许数组之间进行赋值的。8.const的三种用法
(1)const int& func(int a);这种主要用于对象如一个Thing对象:const Thing& func(Thing a);返回的是一个Thing类的一个const对象的引用,这个对象只能调用const成员函数,不能调用非const成员函数。如果去掉const的话,则返回的对象既可以调用const成员函数,也可以调用非const成员函数。
(2)int func(const int & i);这种写法说明在这个函数中是不能改变i的值的。
(3)int func(int a)const;只用这个函数作为类的成员函数时才能这样在最后加const。这说明这个函数是一个const成员函数。在这个函数中是不能改变类中成员变量的值。  
9.运算符的优先级顺序
最高的是:(),[],.->这四个
次之的是单目运算符
第三的是双目运算符:依次是算术运算符,关系运算符,逻辑运算符,赋值运算符
最低的是:,
10.内存分配区域问题
(1)栈区,所有的局部变量的空间都分配在栈上,由编译器自动分配释放
(2)堆区,一般有程序员分配释放(malloc/free,new/delete),其中由malloc/free分配释放的也可以叫做自由存储区
(3)全局区(静态存储区)全局变量和静态变量存放在这个区域,程序结束后由系统释放
(4)文字常量区,常量存放在这个区域,如常量字符串,程序结束后由系统自动释放
(5)程序代码区,存放函数体的二级制代码

二.类相关


1.静态数据成员
(1)静态局部变量:存放在全局区(静态存储区),编译的时候就分配存储空间,知道程序结束时才释放这个变量。只有第一次出现时,给这个变量分配空间,下次出现时直接使用。如果没有初始化静态变量,默认给初始化为0。
(2)普通的全局变量:在所有的函数外面定义,在程序的任何地方都能够访问,当全局变量与局部变量同名时,优先访问当前作用域的变量,这时要想访问全局变量需要在变量的前面加上作用域符号: :。要想在声明文件以外的文件中使用全局变量需要使用extern关键字在其他文件中说明,如:extern int x ;
(3)静态的全局变量:只能够在声明的文件的中使用这个变量
(4)类的静态成员变量:编译期间就为这个变量分配空间,静态成员变量必须要初始化,可以在类的实现的文件中初始化。不能在构造函数中对静态成员变量进行初始化。访问静态成员变量有两种方法:一种使用类名访问,如:CIrcle::静态成员;另一种是用对象名访问,如:对象名.静态成员;在静态成员函数中是不能访问非静态的成员的,因为静态成员函数是属于类的,没有this指针,当访问非静态的成员时是不能判断是哪个对象的成员。在非静态成员函数中均可以访问。
2.友元类和友元函数
友元关系不能被传递也不能被交换,当然也不能被继承。
友元破坏了封装性,不经常用
3.嵌套的类
分为里层类和外层类。里层类可以访问外层类的公用成员,外层类也可以访问里层类的公有成员,若是私有成员,则不能互相访问。
1.引用在声明是必须进行初始化
2.this指针
没一个类的成员函数中都有一个隐藏的参数,就是指向自己的指针。需要注意的时,this指针只是存在于成员函数中,只能在成员函数中访问,在其他地方是无法访问的。
3.析构函数
析构函数不是用来释放对象的。如果对象存放在栈上,则在出了作用域以后有系统自动释放,如果对象在堆上,则由我们自己用delete释放。delete会调用对象的析构函数。对象在释放之前会自动的调用析构函数,完成一些善后的工作。
4.运算符重载的概念:让同一运算符来做不同的运算时称之为运算符重载
要求:1)只能重载已经存在的运算符,不能创建新的运算符 2)重载以后的运算符的操作数个数应保持不变 3)重载的运算符中至少有一个操作数是自定义类型
5.不能重载的运算符有1) ::2).3).*4)?:5)sizeof
6.有三个运算符不用重载就能适用于所有的对象:1)= 2)& 3)*
其中=在不重载的情况下是浅拷贝(两个指针指向的是相同的方向)
7.重载输出运算符时,必须重载为友元函数
如:ostream& operator<<(ostream&out,const complex& x);
其中返回值为ostream&,不能在前面加const;必须是引用返回,因为ostream对象是不能复制的。
参数ostream& out,不能加const因为在函数中改变了out对象中得数据成员。
8.重载下标运算符,必须重载为成员函数
有两种版本:1)const版本:const int& operator[](int index) const 其中返回值中得const是为了保证返回以后不能作为左值对他进行赋值;最后面的const说明这是一个const成员函数,const对象是可以调用这个版本的。
2)非const版本:in& operator[](int index)
9.类中有数组作为数据成员,当这个类的对象赋值给另一个对象时,类中的数组进行的时深拷贝。而在c语言中是不允许数组之间进行赋值的。

 

三.运算符的重载

1.引用在声明是必须进行初始化
2.this指针
没一个类的成员函数中都有一个隐藏的参数,就是指向自己的指针。需要注意的时,this指针只是存在于成员函数中,只能在成员函数中访问,在其他地方是无法访问的。
3.析构函数
析构函数不是用来释放对象的。如果对象存放在栈上,则在出了作用域以后有系统自动释放,如果对象在堆上,则由我们自己用delete释放。delete会调用对象的析构函数。对象在释放之前会自动的调用析构函数,完成一些善后的工作。
4.运算符重载的概念:让同一运算符来做不同的运算时称之为运算符重载
要求:1)只能重载已经存在的运算符,不能创建新的运算符 2)重载以后的运算符的操作数个数应保持不变 3)重载的运算符中至少有一个操作数是自定义类型
5.不能重载的运算符有1) ::2).3).*4)?:5)sizeof
6.有三个运算符不用重载就能适用于所有的对象:1)= 2)& 3)*
其中=在不重载的情况下是浅拷贝(两个指针指向的是相同的方向)
7.重载输出运算符时,必须重载为友元函数
如:ostream& operator<<(ostream&out,const complex& x);
其中返回值为ostream&,不能在前面加const;必须是引用返回,因为ostream对象是不能复制的。
参数ostream& out,不能加const因为在函数中改变了out对象中得数据成员。
8.重载下标运算符,必须重载为成员函数
有两种版本:1)const版本:const int& operator[](int index) const 其中返回值中得const是为了保证返回以后不能作为左值对他进行赋值;最后面的const说明这是一个const成员函数,const对象是可以调用这个版本的。
2)非const版本:in& operator[](int index)
9.类中有数组作为数据成员,当这个类的对象赋值给另一个对象时,类中的数组进行的时深拷贝。而在c语言中是不允许数组之间进行赋值的。

三.运算符的重载

1.引用在声明是必须进行初始化
2.this指针
没一个类的成员函数中都有一个隐藏的参数,就是指向自己的指针。需要注意的时,this指针只是存在于成员函数中,只能在成员函数中访问,在其他地方是无法访问的。
3.析构函数
析构函数不是用来释放对象的。如果对象存放在栈上,则在出了作用域以后有系统自动释放,如果对象在堆上,则由我们自己用delete释放。delete会调用对象的析构函数。对象在释放之前会自动的调用析构函数,完成一些善后的工作。
4.运算符重载的概念:让同一运算符来做不同的运算时称之为运算符重载
要求:1)只能重载已经存在的运算符,不能创建新的运算符 2)重载以后的运算符的操作数个数应保持不变 3)重载的运算符中至少有一个操作数是自定义类型
5.不能重载的运算符有1) ::2).3).*4)?:5)sizeof
6.有三个运算符不用重载就能适用于所有的对象:1)= 2)& 3)*
其中=在不重载的情况下是浅拷贝(两个指针指向的是相同的方向)
7.重载输出运算符时,必须重载为友元函数
如:ostream& operator<<(ostream&out,const complex& x);
其中返回值为ostream&,不能在前面加const;必须是引用返回,因为ostream对象是不能复制的。
参数ostream& out,不能加const因为在函数中改变了out对象中得数据成员。
8.重载下标运算符,必须重载为成员函数
有两种版本:1)const版本:const int& operator[](int index) const 其中返回值中得const是为了保证返回以后不能作为左值对他进行赋值;最后面的const说明这是一个const成员函数,const对象是可以调用这个版本的。
2)非const版本:in& operator[](int index)
9.类中有数组作为数据成员,当这个类的对象赋值给另一个对象时,类中的数组进行的时深拷贝。而在c语言中是不允许数组之间进行赋值的。
三.运算符的重载
0 0
原创粉丝点击