C++--day05

目录: 
1. C的提高 1-131P 时间七天 
2. C++的基础 132-286P 时间八天 
3. C++的提高 287-378P 时间五天 
4. C/C++的数据结构 379-482P 时间五天 
5. C/C++的设计模式基础 483-540P 时间三天

 

视频资料:https://www.bilibili.com/video/av27904891?from=search&seid=10891514449061956870


P171 构造和析构的基础知识

构造函数

1、构造函数定义及调用

  1)C++中的类可以定义与类名相同的特殊成员函数,这种与类名相同的成员函数叫做构造函数;

  2)构造函数在定义时可以有参数;

  3)没有任何返回类型的声明。

2、构造函数的调用

  自动调用:一般情况下C++编译器会自动调用构造函数

  手动调用:在一些情况下则需要手工调用构造函数

 

析构函数

1、析构函数定义及调用

  1)C++中的类可以定义一个特殊的成员函数清理对象,这个特殊的成员函数叫做析构函数

    语法:~ClassName()

  2)析构函数没有参数也没有任何返回类型的声明

  3)析构函数在对象销毁时自动被调用

  4)析构函数调用机制

2、C++编译器自动调用

 

#include<iostream>
using namespace std;class Test
{
public:Test()//无参数 构造函数
    {cout<<"我是构造函数"<<endl;}~Test()//析构函数
    {cout<<"我是析构函数"<<endl;}
private:
};//给对象搭建一个舞台,研究对象的行为
void objplay()
{//先创建的对象后释放
    Test t1;Test t2;
}void main()
{objplay();system("pause");
}

 


 P172  构造和析构的用途演示

#include<iostream>
using namespace std;class Test
{
public:Test()//无参数 构造函数
    {a=10;//作用:完成对属性的初始化工作p=(char *)malloc(100);strcpy(p,"aaa");cout<<"我是构造函数"<<endl;}void printfP(){cout<<p<<endl;cout<<a<<endl;}~Test()//析构函数
    {if (p!=NULL){free(p);}cout<<"我是析构函数"<<endl;}
private:int a;char *p;
};//给对象搭建一个舞台,研究对象的行为
void objplay()
{//先创建的对象后释放
    Test t1;t1.printfP();printf("分隔符\n");Test t2;t2.printfP();
}void main()
{objplay();system("pause");
}

 

 输出结果

 


 P173  构造函数的调用(无参数和有参调用)

#include<iostream>
using namespace std;class Test2
{
public:Test2() //无参数构造函数
    {m_a=0;m_b=0;cout<<"无参数构造函数"<<endl;}Test2(int a)//有参数构造函数
    {m_a=a;m_b=0;cout<<"a:"<<m_a<<endl;printf("这是等号构造函数\n");}Test2(int a,int b)//有参数构造函数
    {m_a=a;m_b=b;cout<<"有参数构造函数"<<endl;}//赋值构造函数(copy构造函数)Test2(const Test2 &obj){cout<<"我也是构造函数"<<endl;}
public:void printT(){cout<<"普通成员函数"<<endl;}
private:int m_a;int m_b;
};//调用有参数构造函数3种方法
void main()
{//Test2 t1;//调用无参数构造函数//1. 括号法Test2 t1(1,2);//C++编译器自动的调用构造函数
    t1.printT();//2. c++对=操作符进行了功能增强 Test2 t2=(3,4,5);Test2 t3=5;//3. 直接调用构造函数 手动的调用构造函数Test2 t4=Test2(1,2);//匿名对象(匿名对象的去和留)
system("pause");
}

 

 输出结果:

 


P175  为什么需要构造和析构函数

1、构造函数的调用方法:自动调用(按照规则调用)

2、显示的初始化类的属性或其他资源

#include<iostream>
using namespace std;class Test3
{
public:void init(int _a,int _b){a=_a;b=_b;}
protected:
private:int a;int b;
};void main()
{//类没有提供构造函数 C++编译器会自动给你提供一个默认的构造函数//类没有提供copy构造函数 C++编译器会自动给你提供一个默认的copy构造函数
    Test3 t1;t1.init(2,3);Test3 tArray[3];tArray[0].init(1,2);tArray[1].init(1,2);tArray[2].init(1,2);//在这种场景之下 显示的初识化方案显得很蹩脚Test3 t21;t21.init(1,2);Test3 t22;t22.init(1,2);Test3 t23;t23.init(1,2);Test3 tArray2[3]={t21,t22,t23};//在这种场景下 满足不了编程需要//Test3 tArray2[1999]={t21,t22,t23};
system("pause");
}

 


 P176  copy构造函数调用时机1和2

#include<iostream>
using namespace std;class Test4
{
public:Test4() //无参数构造函数
    {m_a=0;m_b=0;cout<<"无参数构造函数"<<endl;}Test4(int a)//有参数构造函数
    {m_a=a;m_b=0;cout<<"a:"<<m_a<<endl;printf("这是等号构造函数\n");}Test4(int a,int b)//有参数构造函数
    {m_a=a;m_b=b;cout<<"有参数构造函数"<<endl;}//赋值构造函数(copy构造函数)Test4(const Test4 &obj){cout<<"我也是构造函数"<<endl;m_b=obj.m_b+100;m_a=obj.m_a+100;}
public:void printT(){cout<<"普通成员函数"<<endl;cout<<"m_a:"<<m_a<<endl;}
private:int m_a;int m_b;
};//1. 赋值构造函数 用1个对象去初始化另外一个对象
void main_number1()
{Test4 t1(1,2);Test4 t0(1,2);t0=t1;//用t1给t0 赋值操作和初始化是两个不同的概念//第一种 调用方法Test4 t2=t1;//用t1初始化t2
    t2.printT();system("pause");
}
//2. 第二种调用时机
void main()
{Test4 t1(1,2);Test4 t0(1,2);Test4 t2(t1);//用t1对象初始化t2对象
    t2.printT();
}

 


 P178   copy构造函数调用时机3

#include<iostream>
using namespace std;class Location 
{ 
public:Location( int xx = 0 , int yy = 0 ) { X = xx ; Y = yy ;  cout << "Constructor Object.\n"<<endl ; }Location( const Location & p )         //拷贝构造函数 完成对象的初始化
    { X = p.X ; Y = p.Y ;   cout << "Copy_constructor called." << endl ;  }~Location() { cout << X << "," << Y << " Object destroyed." << endl ; }int  GetX () { return X ; }        int GetY () { return Y ; }
private :   int  X , Y ;
} ;//业务函数  形参是一个元素
void f ( Location  p )   
{ cout << "Funtion:" << p.GetX() << "," << p.GetY() << endl ; 
}void mainobjplay()
{  Location a(1,2);Location b=a;  //形参是一个元素,函数调用,会执行实参变量初始化形参变量
f(b);//b实参去初始化形参p,会调用copy构造函数
} void main()
{  mainobjplay();system("pause");
}

 输出结果:

 

转载于:https://www.cnblogs.com/yangyuqing/p/10402295.html

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

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

相关文章

libreoffice_如何更改您在LibreOffice中可以撤消的操作数

libreofficeIn LibreOffice programs, you can undo one action after another…to a point. The default number of actions you can undo is 100, but that number is easy to change. 在LibreOffice程序中&#xff0c;您可以撤消一个动作&#xff0c;直到某个点。 您可以撤消…

远程连接服务器出现身份验证错误 要求的函数不受支持

来源&#xff1a;https://www.cnblogs.com/lindajia/p/9021082.html 以往发布程序到服务器都没问题。今天远程桌面连接到服务器&#xff0c;突然出现了异常&#xff01;异常信息为&#xff1a; 在网上看到有多种解决方案&#xff1a;发现有种修改注册表的方式很简单。 详细步骤…

CDH集群安装配置(五)- Cloudera Manager Server

在线安装 sudo yum install cloudera-manager-daemons cloudera-manager-server 离线安装 资源下载地址 https://archive.cloudera.com/cm6/6.1.0/redhat7/yum/RPMS/x86_64/ 上次下面资源包到cdh1节点 cloudera-manager-server-6.1.0-769885.el7.x86_64.rpm cloudera-manager-s…

c++简单程序设计-5

编程实验部分1.vector3.cpp #include <iostream> #include <vector> #include <string> using namespace std;// 函数声明 void output1(vector<string> &); void output2(vector<string> &); int main() {vector<string>like…

关于JavaScript的编译原理

引擎&#xff1a;负责整个js程序的编译和执行过程编译器&#xff1a;负责语法分析和代码生成作用域&#xff1a;收集和维护一系列查询&#xff08;由所有声明的标识符组成&#xff09; 【例子&#xff1a;声明一个变量并赋值 var a value&#xff1b;】 Step1.编译器对该程序段…

safari检查元素_如何防止Safari检查是否使用Apple Pay

safari检查元素Apple Pay’s incorporation into macOS Sierra makes it really easy to pay using the service on your Mac with your iPhone or iPad. But that doesn’t mean just because you can, you will, or will want to use Apple Pay in the future. 通过将Apple P…

某乎有人问--微软会抛弃C#吗,有点担心?

在某乎有人问&#xff1a;微软会抛弃C#吗&#xff0c;有点担心&#xff1f;&#xff0c;类似这样的问题&#xff0c;一直都有很多人在问&#xff0c;今天我们就来聊聊这个问题。没必要担心微软倒闭了&#xff0c;C#都不会消失&#xff0c;其实.Net已经不属于微软的了。C#是属于…

icloud上传错误_如何修复HomeKit“地址未注册到iCloud”错误

icloud上传错误While Apple has made serious improvements to the HomeKit smarthome framework, there are still more than a few ghosts in the machine. Let’s look at how to banish the extremely frustrating “Address is not registered with iCloud” error to get…

(3)Python3笔记之变量与运算符

一、变量 1&#xff09;. 命名规则&#xff1a; 1. 变量名不能使用系统关键字或保留关键字 2. 变量区分大小写 3. 变量命名由字母&#xff0c;数字&#xff0c;下划线组成但不能以数字开头 4. 不需要声明变量类型 是 a 1 非 int a 1 5. 查看变量内存地址 id(a), id(b) 6…

WPF 实现视频会议与会人员动态布局

WPF 实现视频会议与会人员动态布局控件名&#xff1a;SixGridView作 者&#xff1a;WPFDevelopersOrg - 驚鏵原文链接[1]&#xff1a;https://github.com/WPFDevelopersOrg/WPFDevelopers框架使用.NET40&#xff1b;Visual Studio 2019;接着上一篇是基于Grid实现的视频查看感…

chromebook刷机_如何获取Android应用以查看Chromebook上的外部存储

chromebook刷机Android apps are a great way to expand the sometimes limited capabilities of Chromebooks, but they can be a problem if you store most of your data on an external medium—like an SD card, for example. Android应用程序是扩展Chromebook有时有限功能…

android 指纹添加_如何将手势添加到Android手机的指纹扫描仪

android 指纹添加So you have a shiny new Android phone, equipped with a security-friendly fingerprint scanner. Congratulations! But did you know that, while useful on its own, you can actually make the fingerprint scanner do more than just unlock your phone…

百度高管:问心无愧

1月23日下午消息&#xff0c;今天下午&#xff0c;百度召开百家号2019内容创作者盛典&#xff0c;百度副总裁沈抖出席并发布演讲。 就在前一天&#xff0c;一篇名为《搜索引擎百度已死》的文章刷屏&#xff0c;文中提到百度搜索有一半以上会指向百度自家产品&#xff0c;尤其百…

Vuex 学习笔记

Vuex 是什么&#xff1f; Vuex 是一个专为 Vue.js应用程序开发的状态管理模式。由于SPA应用的模块化&#xff0c;每个组件都有它各自的数据&#xff08;state&#xff09;、视图&#xff08;view&#xff09;和方法&#xff08;actions&#xff09;&#xff0c;当项目内容越来越…

xdf文档怎么转换为pdf_如何将PDF文件和图像转换为Google文档文档

xdf文档怎么转换为pdfYou probably know you can create and edit documents with Google Docs, but you can edit more than just .doc files. Google Drive can also convert any PDF, JPG, PNG, or GIF into a document with fully editable text. Here’s how. 您可能知道可…

在现代 Windows 上使用经典 Windows 2000、XP、Vista 任务栏

你好&#xff0c;这里是 Dotnet 工具箱&#xff0c;定期分享 Dotnet 有趣&#xff0c;实用的工具和组件&#xff0c;希望对您有用&#xff01;前言您第一次使用的 Windows 是哪个版本的&#xff1f;我最早使用的 Windows XP&#xff0c;然后再经过 XP、7、8/8.1 、Windows 10&a…

airdroid黑屏_如何使用AirDroid从PC控制Android设备

airdroid黑屏AirDroid for Android replaces your USB cable for connecting to your PC. Transfer files back and forth, send text messages, play music, view your photos, and manage applications using a web browser or a desktop client. 适用于Android的AirDroid取代…

分析java程序

2019独角兽企业重金招聘Python工程师标准>>> 最近公司的一个账单推送的服务&#xff0c;发现有延迟。我排查的时候发现&#xff0c;有一个程序日志不动了&#xff08;采用消息队列&#xff0c;部署了两台服务器来负载均衡&#xff09;。 网上说&#xff1a; jstack …

环境部署(九):linux下安装python+chrome+Xvfb

在基于selenium进行的UI自动化测试中&#xff0c;开发调试环境一般都是windows操作系统。完成后需要部署到专门的测试环境。 如要要部署到linux环境的服务器&#xff08;阿里云、腾讯云&#xff09;执行&#xff0c;那么测试脚本也需要对应的浏览器支持&#xff0c; 才能正常进…