析构函数,构造函数,友元和接口函数等
析构函数
1 | ~CStu()//只有一个,不能重载,不能有参数 |
对象声明周期结束时,自动调用
后括号}或者碰到return
构造函数是遇到声明语句马上调用1
2
3
4
5
6
7
8 {
CStu stu;//执行到这一步,直接调用构造函数
}//执行到这一步,调用析构函数或者return
```
指针对象遇到delete才调用析构函数
```cpp
Cstu* stu = new CStu;
delete stu;
临时对象,作用鱼仅限这一行代码,创建完直接调用析构函数1
2
3
4
5
6
7
8
9
10
11
12 CStu(12)//在内部是创建了一个对象 CStu tu(12)
```
**malloc free和 new delete区别**<br>
## tihs 指针
this指针创建对象时才有(不是成员)<br>
当局部变量和外部变量同名
```cpp
int a;
CStu(int a)
{
this->a=a
}
是成员函数的隐含参数1
2
3
4
5
6
7CStu* GetAddr()
{
return this
}
//main函数:
CStu* p=st.GetAddr()
cout<<p<<endl
st对象包含对象地址
构造函数
class CStu
{
public:
int age;
float f;//只有静态常量才能在类中初始化
void fun()//相当于类的初始化函数
{
age=12;
f=12.12f;
}
CStu()//构造函数,无返回值
{
age=13;
f=12.13f;
}
}
int main()
{
CStu stu;
stu.fun();
cout << stu.a << " " << endl;
system("pause");
return 0;
}
//需要先调用fun函数,才能调用变量a,
如果有构造函数,可以直接调用
CStu stu;
cout << stu.a << " " << endl;
1.作用
2.执行时间:对象创建时调用
CStu *stu = new CStu;
stu->age;
数组new是才能创建对象调用构造函数
构造函数的类型
带参数
Cstu(int a,float b)//可以指定默认值
{
age=a;
f=b;
}
如果构造函数有参数,在声明时一定要传参
CStu stu(12,12.23f);//不传参数不要括号
可以有多个构造函数(重载)
友元
在类里面声明一个友元
Class CStu
{
public:
int a;
float b;
friend class CTech;//友元类
friend void fun();//友元函数,外部fun函数就是调用类里面的私有和protected变量
}
Class CTech
{
}
//友元类去使用私有变量
不受访问修饰符的限制,但是破坏了类的封装性
接口函数
Class CStu
{
private:
int age;
public:
void set()//接口函数
{
age=13;
}
int get()//接口函数
{
return age;
}
}
int main()
{
CStu stu;
stu.set();
int a=stu.get();
}
age是类里面的私有变量,为了类的封装性。采用接口函数