目录
1、 c++的类在没有加权限的时候,默认为private。只有类内可以访问,类外不能访问。
(1)接着上面的代码,如何在类外直接访问private的内容?
名词解释:
- 成员函数:在类内定义的函数,表示这个对象的行为动作的函数(动作)
- 成员变量:在类内定义的变量,表示这个对象的属性的变量(属性--名词)
- 实例化对象:定义类的变量
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;
}
运行结果: