c++之构造函数和析构函数

目录

名词解释:

1、 c++的类在没有加权限的时候,默认为private。只有类内可以访问,类外不能访问。

2、共有接口

(1)接着上面的代码,如何在类外直接访问private的内容?

(2)共有接口函数也可以重载

3、构造函数的运用(从无到有)

(1)构造函数的作用:

(2)构造函数的使用注意事项:

​4、析构函数:(对象从有到无)


名词解释:

  • 成员函数:在类内定义的函数,表示这个对象的行为动作的函数(动作)
  • 成员变量:在类内定义的变量,表示这个对象的属性的变量(属性--名词)
  • 实例化对象:定义类的变量

1、 c++的类在没有加权限的时候,默认为private。只有类内可以访问,类外不能访问。只有加了public类外才可以访问。

#include <iostream>
#include <string.h>
using namespace std;

/******************定义类********************************/
class Student
{
public:
    void study()//成员函数(构造函数1)
    {
        cout << name << "在努力学习!" << endl;
    };
    void eat()//成员函数(构造函数2)
    {
        cout << name << "说他今年" << age << "岁了!" << endl;
    };
private:
    string name = {0};//成员变量
    int age = {0};    //成员变量
    char sex = {0};   //成员变量
    int id = {0};     //成员变量
};

/******************类结束********************************/

int main()
{
    Student stu;//实例化对象,产生变量stu;当对象创建时,程序会自动调用构造函数,同一个类中可以 
                // 具备多个构造函数。
    stu.name = "liyujie";
    stu.age = 26;
    stu.study();//调用成员函数
    stu.eat();  //调用成员函数
    return 0;
 
}

2、共有接口

(1)接着上面的代码,如何在类外直接访问private的内容?

答:在类内设置一个访问private的共有接口,如下所示:

#include <iostream>
#include <string.h>
using namespace std;

/******************构造类********************************/
class Student
{
public:
    void study()//成员函数
    {
        cout << name << "在努力学习!" << endl;
    };
    void eat()//成员函数
    {
        cout << name << "说他今年" << age << "岁了!" << endl;
    };

    //访问name的共有接口
    void setName(string _name)
    {
        name = _name;
    }
private:
    string name = {0};//成员变量
    int age = {0};    //成员变量
    char sex = {0};   //成员变量
    int id = {0};     //成员变量
};
/******************类结束********************************/

int main()
{

    Student s1;        //实例化对象
    s1.setName("lily");//给name取值
    s1.study();        //调用成员函数
    
    return 0;
 
}

总结:想要在类外访问类内的private的内容,就要在类内设置一个共有接口

(2)共有接口的注意事项:

  • 共有接口的位置在public里边;
  • 调用共有接口时使用(),具体参考上面的示例;

(3)共有接口函数也可以重载 

#include <iostream>
#include <string.h>
using namespace std;

class student
{
public:
    //成员函数
    void mes()
    {
        cout << name << "今年"<<age<<"岁了!" << endl;
    }
/*********************接口函数重载*****************************/
    //接口函数1
    void setName(string _name)
    {
        name = _name;
    }
    //接口函数2
    void setName(string _name,int _age)
    {
        name = _name;
        age = _age;
    }
/************************************************************/
private:
    string name = { 0 };
    int age = 0;
    char sex = { 0 };
    int id = 0;
};


int main()
{
    student s1;          //实例化对s1
    s1.setName("lilo");  //调用接口函数1
    s1.mes();            //调用成员函数

    student s2;           //实例化对s1
    s2.setName("王华",56);//调用接口函数1
    s2.mes();             //调用成员函数

    return 0;
}


 运行结果

3、构造函数的运用(从无到有)

(1)构造函数的作用:

        给成员变量初始化的

(2)构造函数的使用注意事项:

  • 构造函数在public中添加
  • 构造函数的的函数名和类名相同,参数的名称和成员变量尽可能不一样
  • 构造函数在实例化对象时才会被调用
  • 构造函数可以重载(构造函数可以有多个,并且越多越灵活)
  • 如果没有定义构造函数,系统会自动提供(一般情况下我们会自定义);一旦自定义了构造函数,系统就会调用自定义的函数
  • 构造函数没有返回值
  • 使用构造函数后,就不用再使用共有接口,构造函数和共有接口函数有相同的功能:即在类内public中访问私有的成员变量传递给类外;
#include <iostream>
#include <string.h>
using namespace std;

class student
{
public:
/***************************构造函数*********************************************/
    //构造函数1
    student(string _name)
    {
        name = _name;
        cout << name << "今年" << endl;
    }
    //构造函数2
    student(string _name, int _age)
    {
        name = _name;
        age = _age;
        cout << name << "今年"<<age<<"岁了!" << endl;
    }
    //构造函数3
    student(string _name, int _age,char _sex)
    {
        name = _name;
        age = _age;
        sex = _sex;
        cout << name << "是个" << sex << "生,今年"<<age<<"岁了"<<endl;
    }
    //构造函数4
    student(string _name, int _age, char _sex,int _id)
    {
        name = _name;
        age = _age;
        sex = _sex;
        id = _id;
        cout << name << "是个" << sex << "生,他的学号是"<<id<<",他今年" << age << "岁了" << endl;
    }
/****************************************************************************/
private:
    string name = {0};
    int age = 0;
    char sex = { 0 };
    int id = 0;
};


int main()
{
    student s1("丽丽");              //实例化对象1,调用构造函数1
    student s2("小明",27);           //实例化对象2,调用构造函数2
    student s3("王欢",20,'n');       //实例化对象3,调用构造函数3
    student s4("李鈺杰", 22, 'n',68);//实例化对象4,调用构造函数4

    return 0;
}


运行结果:

 4、析构函数:(对象从有到无)

析构函数的注意事项:

  • 形式:~类名();没有参数,没有返回值
  • 作用:回收资源
  • 析构函数在生命周期结束后会调用,即就是{ }后调用,所以析构会连着使用
  • 没有自定义时,系统会自动提供
#include <iostream>
#include <string.h>
using namespace std;

class student
{
public:
    //构造函数
    student(string _name,int _age)
    {
        name = _name;
        age = _age;
        cout << name << age << "岁了!" << endl;
    }
    //析构函数(系统自动定义,自动调用)
    ~student()
    {
        cout << "析构函数" << endl;
    }
private:
    string name = { 0 };
    int age = 0;
    char sex = { 0 };
    int id = 0;
};


int main()
{
    student s1("李花",56);
    student s2("王丹", 26);
    return 0;
}


运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值