- 数组的元素不仅可以是基本数据类型,也可以是自定义类型,对象数组的元素是对象,不仅具有数据成员,而且还有函数成员;
Location a[2]={location(1,2),location(3,4)};
在不同的函数之间传送大量数据时,如果不传递变量的值,只传递变量的地址,就会减少系统开销,提高效率。
*:指针运算符 &:地址运算符
*ptr=&i; //取i的地址赋给ptr
array2[3][3]={{1,2,3}}
for(int i=0;i<3;i++)
{
For(int j=0;j<3;j++)
Cout<<*(*(array2+i)+j)<<endl; //逐个输出二维数组第i行元素值
}
int * point[10]; ///一个数组,它包括的元素是指针
int (*point)[10]; //一个指针,它指向的是一个数组
2,this指针是一个隐于每一个类的非静态成员函数中的特殊指针(包括构造函数和析构函数),它用于指向正在被成员函数操作的对象。
堆对象:动态内存分配技术可以保证程序在运行过程中按照实际需要申请适量的内存,使用结束后还可以释放,这种在程序运行中申请和释放的存储单元,申请和释放过程一般称为建立和删除(new和delete)。
float (*cp)[25][10];
cp=new float[10][25][10]; //指向一个25*10的二维float类型数组的指针
int * point;
point=new int(2); //初始化过程就是赋值
new T(); //建立一个类的对象
内存泄漏:如用new分配的内存,若没有用delete加以释放的话,则会导致动态分配的内存无法收回,使得程序占据的内存越来越大。
3,Vector:(创建数组对象)
Vector<元素类型>数组类型名(数组长度,元素初值);
Vecter<int> ivec; //定义一个容器
Vector<int>::iterator iter1=ivec.bengin(); //将迭代器iter1初始化为指向ivec容器的第一个元素
sort(vec.begin(),vec.end());(默认是按升序排列,即从小到大).
可以通过重写排序比较函数按照降序比较,如下:
定义排序比较函数:
bool Comp(const int &a,const int &b)
{
return a>b;
}//调用时:sort(vec.begin(),vec.end(),Comp),这样就降序排序
4,深浅复制
操作符的重载
const_cast 只用于将常指针转换为普通指针,将常引用转换为普通引用,用来将常对象转换为普通对象就没有意义了。
5,静态成员函数可以直接访问该类的静态数据和函数成员,而访问非静态成员,必须通过对象名,而动态成员函数可以随意访问静态数据,案例:具有静态数据成员的Point类。静态成员是解决同一个类的不同对象之间数据和函数共享问题的。
6,友元函数是在类中用关键字friend修饰的非成员函数,在它的函数体中可以通过对象名访问另一个类的私有成员和保护成员,大致结构是:
Class A
{
...
Friend class B;
.....
};
Class B
{
定义了一个Point();
...
};
B::Point(A &私有成员或者是受保护成员)
{
....
}
7,使用const关键字修饰的函数为常成员函数,对于无须改变对象状态的成员函数,都应当使用const函数,这是能够提高程序质量的一个好习惯,如果一个类中说明了常数据成员,那么任何函数中都不能对该成员赋值,
初始化私有成员的一种类型:
public:
Line(const Point &p1,const Point &p2):p1(p1),p2(p2),len(-1) {}
private:
Point p1,p1;
double len;