2016.8.3 C++ 第二天
// private:数据安全,保护属性,外界(本类之外)不能访问到
// public:提供接口,类与外部之间的一个桥接
// 属性:成员变量 private
// 行为:成员函数 public
构造函数
作用:对成员变量进行初始化
特征:1⃣️必须为public
2⃣️函数名和类名相同
3⃣️没有返回值
4⃣️可以有参数
构造函数的调用:当创建对象时根据参数个数自动调用相应的构造函数(不需要object.形式进行调用)
如果程序中没有任何一个构造函数,编译器提供一个默认构造函数(空的)。
如果程序中有任何一个构造函数,编译器不再提供默认构造函数
一般写两个,一个没有参数,一个带有全部成员的参数
组合类:要求一一对应
函数的重载
在同一个作用域中,函数名相同,参数列表不同,这些函数构成函数重载。参数列表不同分为两种情况:参数个数不同;参数类型不同。
编译器根据参数个数、类型来调用相应的函数
初始化列表:用来对成员变量初始化
1⃣️执行效率高
2⃣️成员变量是const、引用、组合、继承 时,必须使用初始化列表赋值
组合类
一个类A 的成员变量是另一个类的对象,A成为组合类
作用:代码重用
注意:构造函数匹配
析构函数
析构函数的作用:当对象生命周期结束时,回收对象所占空间(堆空间)。如:~Circle()。
1⃣️必须为public
2⃣️没有返回值
3⃣️不能带参数
4⃣️不能被重载(唯一性)
当对象的生命周期结束,自动调用析构函数
// 堆空间 C: malloc free NULL C++: new delete NULL
int *p=new int (100); // 在堆空间分配int大小的空间,存储值为100
cout<<*p<<endl;
char *p1=new char ('a'); // 在堆空间分配char大小的空间,存储值为'a'
cout<<*p1<<endl;
delete p;
delete p1;
p = NULL;
p1 =NULL;
//在堆空间开辟10个int大小的空间
int *p2=new int [10];// 类似于*p2[10]?
for (int i=0; i<10; i++) {
p2[i]=i;
cout<<p2[i]<<endl;
}
delete [] p2;// 删除10个p2空间
*/
// 构造函数释放堆空间
class test1{
private:
int *p; // 当成员变量是指针,空间一定被分配在堆上
public:
test1(){
p = new int [5];
for (int i=0; i<5; i++) {
p[i]=i;
std::cout<<p[i]<<std::endl;
}
}
~test1(){
if (p!=NULL) {
delete []p;
p=NULL;
}
cout<<"NULL"<<std::endl;
}
};