[C++基础]一些函数


析构函数,构造函数,友元和接口函数等

析构函数

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 freenew delete区别**<br>
## tihs 指针
this指针创建对象时才有(不是成员)<br>
当局部变量和外部变量同名
```cpp
int a;
CStu(int a)
{
this->a=a
}

是成员函数的隐含参数

1
2
3
4
5
6
7
CStu* 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是类里面的私有变量,为了类的封装性。采用接口函数