const与指针类型
来源:互联网 发布:2017年淘宝双12新玩法 编辑:程序博客网 时间:2024/06/06 08:24
const int *p = NULL;int const *p = NULL;//完全等价int * const p = NULL//和上面两种情况不同const int * const p = NULL;int const * const p = NULL;int x = 3;const int *p = &x;//p=&y; 正确//*p = 4; 错误//由于const修饰的是*p,而*p是具体的值而不是地址,所以这里表示*p所指向的值是不可改变的。int x = 3;int *const p = &x;//p = &y;错误的//因为const修饰的是p,p是地址,因此地址p是不可改变的。const int x = 3;const int * const p = &x;//都不能变。const与引用int x = 3;const int &y = x;//x = 10;正确//y = 20;错误,不同通过y修改,但是能通过x修改。对比例子:const int x = 3;int *y = &x;//编译器报错,可变指针不能指向不可变的变量。int x = 3;const int *y = &x;//允许。
宏定义编译器不检查语法错误。
函数特性
函数默认值:
void fun(int i, int j = 5; int k = 10); //正确 func(20);func(20,30);fun(20,30,40);void fun(int i, int j = 5;int k);//错误
有默认参数值的参数必须在参数表的最右端
函数重载
在相同的作用域内
用同一个函数名定义多个不同的函数
参数个数和参数类型不同
在编译过程,会这样getMax_int_int; getMax_double_double
内联函数(关键字inline int getMax(int x, int y)):编译时讲函数体的代码和实参代替函数的调用语句,优点是省去了调用过程,比较快,适合短循环
1:内联编译时建议性的,由编译器决定
2:逻辑简单,调用频繁的函数建议用内联
3:递归函数无法使用内联,即使使用inline关键字,编译器也将他看成普通函数
C++内存管理
本质是资源管理,由操作系统掌控。我们可以做的就是像操作系统申请资源和释放资源
申请内存 new 释放资源 delete 他们是运算符,而不是函数
int *p = new int; //申请单个内存int *p1 = new int[10]; //申请一块内存delete p;delete []p1;
注意会申请失败。用if(p ==NULL)申请失败。
释放内存时,在delete p;后,要设置p=NULL; 否则会有乱七八糟的错误
C++内存分配:
补充在这里。
结构体:
区别:
C 结构体,就是数据的集合,只有成员变量,没有方法。
C++ 结构体和 C++ 类基本一样,可以有成员变量,有方法, 唯一区别就是结构体成员默认访问控制为public,类为private
结构是一种用关键字struct声明的自定义数据类型。与类相似,也可以包含构造函数,常数,字段,方法,属性,索引器,运算符和嵌套类型等,不过,结构是值类型。
1.结构的构造函数和类的构造函数不同。
a.结构不能包含显式的无参数构造函数。结构成员将自动初始化为它们的默认值。
b.结构不能包含以下形式的初始值设定类:base(argument-list);
2.对于结构中的实例字段成员,不能在声明时赋值初始化。
3.声明了结构类型后,可以使用new运算符创建构造对象,也可以不使用new关键字。如果不使用new,那么在初始化所有字段之前,字段将保持未赋值状态且对象不可用。
5.什么时候用结构呢?结构使用简单,并且很有用,但是要牢记:结构在堆栈中创建,是值类型,而类是引用类型。每当需要一种经常使用的类型,而且大多数情况下该类型只是一些数据时,使用结构能比使用类获得更佳性能。
结构是值类型,所以会影响性能,但根据使用结构的方式,这种影响可能是正面的,也可能是负面的。正面的影响是为结构分配内存时,速度非常快,因为它们将内联或者保存在堆栈中。在结构超出了作用域被删除时,速度也很快。另一方面,只要把结构作为参数来传递或者把一个结构赋给另一个结构(例如A=B,其中A和 B是结构),结构的所有内容就被复制,而对于类,则只复制引用。这样,就会有性能损失,根据结构的大小,性能损失也不同。注意,结构主要用于小的数据结 构。但当把结构作为参数传递给方法时,就应把它作为ref参数传递,以避免性能损失——此时只传递了结构在内存中的地址,这样传递速度就与在类中的传递速 度一样快了。另一方面,如果这样做,就必须注意被调用的方法可以改变结构的值。
还有一点:struct 与class本质上应该是相同的,只是默认的访问权限不同(struct默认是public,class默认是private ).之所以要保留struct,很大一部分原因是为了与C兼容吧(C++的一篇文章中是这么说的,我感觉还是有一定的道理). class感觉是应该是struct的扩充,除了可以设置成员的访问类型外,还可以有自己的成员函数,可以继承派生等,好象struct能做的class 都能做,但反过来就不行了,如果没有保护数据的要求,struct能做的我都用struct做,比较简单。
C++ 封装
构造函数,析构函数, this指针
类的定义:数据成员,成员函数
累的访问限定符:public, private, protected
从栈中实例化对象,TV tv; TV tv[20];
从堆中实例化对象, TV *p = new TV(); TV *q = new TV[20];
delete p; delete []q;
在栈中定义好对象后用点 tv.type=0; tv.changeVol();
在堆中定义好对象后用-> : p-type=0; p->changeVol();
p[i]->type = 0;
基本的数据类型:
字符串数组,用的比较频繁
#include<string> string s1;string s2("ABC");string s3(s2);string s4(n,'c);s.empty();s.size();s[n];s1+s2;s1 = s2;v1 == v2;v1 != v2;stirng s6 = "hello" + "world" //错误,只能是变量+变量 或者 变量+“dd”
class A{ public: void setAge(int m_age){age = m_age;}}
优先将其编译成内联函数。
类外定义:
同文件类外定义,分文件类外定义
同文件类外定义:
class Car{public: void run();};void Car::run(){}
//Car.hclass Car{public: void run();}
//Car.cppinclude "Car.h"void Car::run(){}
#include<>直接从编译器自带的函数库中寻找文件
#include""是先从自定义的文件中找 ,如果找不到在从函数库中寻找文件
如果是自己写的头文件 建议使用#include“”
类的初始化:
类的数据成员存放在栈或者堆中,而方法只存一份,放在代码区
构造函数:对象创建后自动调用,且只调用一次,
1:自动调用
2:构造函数与类同名
3:没有返回值
4:可以重载
5:实例化对象仅用到一个
6:当用户没有定义构造函数使,编译器自动生成。
- const与指针类型
- const指针与指向const类型的指针
- const类型指针与普通指针相互赋值
- const与const指针
- C++基本概念——const与基本类型和类、const与指针、const与引用
- const”类型的指针“
- 指针:const与指针
- 指针与const限定符的类型识别
- 两种与const相关的指针类型
- const 的 双指针类型
- 强制转换const类型指针
- C++ const 和指针类型
- const 指针与指向const的指针
- 指向const的指针与const指针
- const 指针与指向const的指针
- const 指针与指向const的指针
- const 指针与指向const的指针
- const 指针与指向const的指针
- 虚拟机centos6.5 下 FastDFS 5.05 分布式存储集群安装配置
- cocoPods可能遇到的错误iOS
- bzoj 4499
- Windows Socket 编程_ 简单的服务器/客户端程序
- C++继承详解之二——派生类成员函数详解(函数隐藏、构造函数与兼容覆盖规则)
- const与指针类型
- 盘点Linux十大版本
- 动态规划-美团笔试-最大直方图
- Linux下安装redis
- maven 添加jar包
- 继承中的构造方法
- JAVA发送HTTP请求
- kafka基本使用实战
- Mysql 5.6 ONLINE_DDL