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;}
/*********************接口函数重载*****************************///接口函数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;
}

运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/438287.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是NAT?NAT类型有哪些?

晚上好&#xff0c;我的网工朋友。NAT是一种地址转换技术&#xff0c;它可以将IP数据报文头中的IP地址转换为另一个IP地址&#xff0c;并通过转换端口号达到地址重用的目的。 在大多数网络环境中&#xff0c;我们都需要通过 NAT 来访问 Internet。 NAT作为一种缓解IPv4公网地址…

二、mongoose的使用,实现用户集合的操作

前言 mongodb&#xff1a;为了在node应用中与MongoDB交互&#xff0c;开发者需要使用MongoDB的驱动程序&#xff0c;所以安装的mongodb就是其驱动程序&#xff1b; mongoose: 是一个用于 MongoDB 的对象建模工具&#xff0c;提供了一个丰富的查询语言和许多其他功能&#xff0c…

Linux:共享内存

文章目录 System V共享内存的原理管理共享内存shmgetshmatshmdtshmctl 共享内存和管道实现进程间同步通信 前面介绍完了匿名管道和命名管道&#xff0c;那么本篇要引入的主题是共享内存 System V 作为进程通信部分的内容&#xff0c;共享内存必然有其存在的意义和价值&#x…

计算机网络——网络层(2)

计算机网络——网络层&#xff08;2&#xff09; 小程一言专栏链接: [link](http://t.csdnimg.cn/ZUTXU) 网络层——控制平面概述路由选择转发表路由协议路由信息的交换小结 路由选择算法常见的路由选择算法距离矢量路由算法工作原理优缺点分析 链路状态路由算法基本工作原理优…

day11_oop

今日内容 零、 复习昨日 一、作业 二、封装 三、继承 四、重写 五、this和super 六、访问修饰符 零、 复习昨日 数组创建的两种方式 new int[3];new int[]{1,2,3,4}; 手写一个遍历输出数组元素的伪代码 构造方法什么作用? 创建对象,将对象的属性初始化 有参无参构造什么区别?…

【IEEE会议征稿通知】2024年算法、软件工程与网络安全国际学术会议(ASENS 2024)

2024年算法、软件工程与网络安全国际学术会议&#xff08;ASENS 2024&#xff09; The International Conference on Algorithms, Software Engineering and Network Security 2024年算法、软件工程与网络安全国际学术会议&#xff08;ASENS 2024&#xff09;将于2024年3月29…

error: failed to open index: Database already open. Cannot acquire lock报错解决办法

ordinals节点数据同步出现报错 error: failed to open index: Database already open. Cannot acquire lock.问题分析&#xff1a; 出现问题的原因是btcoin core节点数据没有同步完我们就开始进行ordinals数据同步&#xff0c;导致/root/.local/share/ord/index.redb 文件数据…

深度强化学习(王树森)笔记03

深度强化学习&#xff08;DRL&#xff09; 本文是学习笔记&#xff0c;如有侵权&#xff0c;请联系删除。本文在ChatGPT辅助下完成。 参考链接 Deep Reinforcement Learning官方链接&#xff1a;https://github.com/wangshusen/DRL 源代码链接&#xff1a;https://github.c…

在Visual Studio 2022中将源文件扩展名改为 .c 后,没有显示 #define _CRT_SECURE_NO_WARNINGS 1?

一、问题 在Visual Studio 2022中将源文件扩展名改为 .c 后&#xff0c;没有显示 #define _CRT_SECURE_NO_WARNINGS 1&#xff1f; 二、解答 对于使用了不安全的C运行时库函数&#xff08;如strcpy、scanf等&#xff09;而触发的安全警告&#xff0c;编译器不会默认包含_CRT_S…

ubuntu中的rsyslog

目录 1. rsyslog简介 2. 查看/var/log 3. syslog的配置文件 3.1 /etc/rsyslog.d/50-default.conf 3.2 /etc/rsyslog.conf 4. 如何写入syslog 4.1 C语言 4.2 shell 4.3 内核输出 5. syslog.1和syslog.2.gz等文件是如何生成 6. logrotate是如何被执行 7. 如何限制sys…

OJ_糖果分享游戏

题干 c实现 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<vector> using namespace std;void ShareCandy(vector<int>& student) {int size student.size();vector<int> share(size); //保存每个同学交换前&#xff0c;糖果数量…

HTTPS 之fiddler抓包--jmeter请求

一、浅谈HTTPS 我们都知道HTTP并非是安全传输&#xff0c;在HTTPS基础上使用SSL协议进行加密构成的HTTPS协议是相对安全的。目前越来越多的企业选择使用HTTPS协议与用户进行通信&#xff0c;如百度、谷歌等。HTTPS在传输数据之前需要客户端&#xff08;浏览器&#xff09;与服…