目录
名词解释:
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;}
/*********************接口函数重载*****************************///接口函数1void setName(string _name){name = _name;}//接口函数2void 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; //实例化对s1s1.setName("lilo"); //调用接口函数1s1.mes(); //调用成员函数student s2; //实例化对s1s2.setName("王华",56);//调用接口函数1s2.mes(); //调用成员函数return 0;
}
运行结果
3、构造函数的运用(从无到有)
(1)构造函数的作用:
给成员变量初始化的
(2)构造函数的使用注意事项:
- 构造函数在public中添加
- 构造函数的的函数名和类名相同,参数的名称和成员变量尽可能不一样
- 构造函数在实例化对象时才会被调用
- 构造函数可以重载(构造函数可以有多个,并且越多越灵活)
- 如果没有定义构造函数,系统会自动提供(一般情况下我们会自定义);一旦自定义了构造函数,系统就会调用自定义的函数
- 构造函数没有返回值
- 使用构造函数后,就不用再使用共有接口,构造函数和共有接口函数有相同的功能:即在类内public中访问私有的成员变量传递给类外;
#include <iostream>
#include <string.h>
using namespace std;class student
{
public:
/***************************构造函数*********************************************///构造函数1student(string _name){name = _name;cout << name << "今年" << endl;}//构造函数2student(string _name, int _age){name = _name;age = _age;cout << name << "今年"<<age<<"岁了!" << endl;}//构造函数3student(string _name, int _age,char _sex){name = _name;age = _age;sex = _sex;cout << name << "是个" << sex << "生,今年"<<age<<"岁了"<<endl;}//构造函数4student(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,调用构造函数1student s2("小明",27); //实例化对象2,调用构造函数2student s3("王欢",20,'n'); //实例化对象3,调用构造函数3student s4("李鈺杰", 22, 'n',68);//实例化对象4,调用构造函数4return 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;
}
运行结果: