几种权限
//不写的情况下默认为private
private :允许类内成员访问
protected :允许类内成员,子类访问
public :允许类内成员,子类,类外访问
深拷贝和浅拷贝的区别
浅拷贝:简单的值拷贝操作;
问题:堆区的内存重复释放。一般出现在成员变量是指针,有用到new的情况。
例子:
class Person{
int *m ;
Person(const Person &p2){
m = p2.m; //这里是将指针的地址放给了m,内存是两个类公用
}
}
深拷贝:在堆区申请一块内存空间,进行拷贝操作,
例子:
class Person{
int *m ;
Person(const Person &p2){
m = new int(*p2.m); //在堆区申请一块新的内存,将p2.m指向的数据拷贝进去
}
}
类对象作为类成员
例子:
class phone{
int num;
phone(int a):num(a){
}
}
class person{
phone a;
//phone a = num;隐式
person(int num):a(num){
}
}
void main(){
person p(10);
}
其他类的对象作为本类的对象的时候,
构造函数,先构造其他类,再构造本类
析构函数,先析构本类,再析构其他类
类的静态成员函数
例子:
class phone{
static string name;//
static string getName(){
return name;
}
}
两种访问方式
一、phone::getName();
二、phone p;
p.getName();
static声明的成员是存在于全局区,即使没有创建实例也存在,整个程序共享这个静态函数
注意:静态成员函数只能访问静态成员变量,静态成员变量不允许访问