c++入门篇八
构造函数的调用规则:
系统会提供三个函数,一个是默认的构造函数(无参,函数体为空),一个是拷贝构造函数(无参,函数体为空),一个是析构函数,对类中非静态成员属性简单值拷贝\
如果用户定义了拷贝构造函数,C++不会再提供任何默认拷贝函数
当我们提供了有参的构造函数之后,系统就不会给默认提供构造函数了
class Person {
public:
Person(int a) {
}
//下面这个是拷贝的构造函数
//Person(const Person& m) {
//}
};
void test01() {
Person p1();//这个是没有问题的,默认会使用有参的构造函数
//Person p2;//这是不可以的,当我们定义了有参的构造函数之后,系统就不会再提供默认的构造函数了
Person p2(p1);//系统会提供拷贝的构造函数
}
初始化列表的基本声明:
//初始化列表的基本使用
class Person {
public:
/*
//无参的构造函数
Person() :m_a(2), m_b(3), m_c(4) {
//后面相当于是赋值操作,m_a=a,m_b=b,m_c=c
cout << "a=" << m_a << "b=" <<m_b << "c" << m_c << endl;
}
*/
//有参的构造函数
//利用初始化列表,初始化数据
//构造函数后面+:属性(参数),属性(参数)...
Person(int a,int b,int c):m_a(a),m_b(b),m_c(c){
}
int m_a;
int m_b;
int m_c;
};
void test() {
Person p1;//调用的是无参数的构造函数
Person p2(, , );//调用的是由参数的构造函数
}
int main() {
test();
}
例子:使用有参构造函数,初始化列表操作
// 类.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
// #include "pch.h"
#include <iostream>
using namespace std;
#include <string> class Phone {
public:
Phone(string pn) {
phonename = pn;
}
void setname(string name) {
phonename = name;//调用有参构造函数
}
string phonename;
}; class Game {
public:
void setname(string name) {
gamename = name;
}
Game(string gn):gamename(gn) {//当有参数进来的时候,调用game的有参构造函数,执行初始化操作>>gamename=gn;赋值
}
string gamename;
}; class Person {
public:
Person(string name,string phonename,string gamnename):name(name),m_phone(phonename),m_game(gamnename) {
}//在这里相当于是已经传了参数进去,如果是string类型的话相当于是赋值操作name=name,如果是类对象的话相当于是传参数进去,m_phone(phonename)
//相当于调用了m_phone类对象有参构造函数,在执行赋值操作,m_game类对象也是调用了构造函数,初始化操作了 //类对象作为类成员的时候,构造对象先将类对象一一构造,把所有的默认构造函数全部执行一遍,然后构造自己,析构的顺序是相反的
string name;
Phone m_phone;
Game m_game;
void playgame() {
cout << "姓名:" << name << "手机名称" << m_phone.phonename << "游戏名字:" << m_game.gamename << endl;
}
}; void test01() {
//第二种方式:使用有参构造函数,传入参数(如果是类对象的话,传参进去,调用有参构造函数,进行赋值操作),初始化列表操作
Person p1("yun","LOL","三星");//有参构造函数初始化列表
p1.playgame();
//第一种方式:直接是对类对象里面的属性进行赋值操作
/*
Person p1;//使用无参构造函数,对类对象里面的属性(包括类对象)进行操作,类对象的类对象的属性=xxxx
p1.m_game.gamename = "LOL";
p1.m_phone.phonename = "三星";
p1.playgame();
*/
}
int main() {
test01();
}

c++入门篇八的更多相关文章
- 服务端技术进阶(八)GitHub入门篇
服务端技术进阶(八)GitHub入门篇 前言 在投递简历的过程中,发现有的公司会要求填写自己的GitHub地址,而自己却还没有GitHub帐号,准确点说是自己还不太会使用GitHub.(貌似开源社区中 ...
- ElasticSearch入门 第八篇:存储
这是ElasticSearch 2.4 版本系列的第八篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...
- spring boot(一):入门篇
构建微服务:Spring boot 入门篇 什么是spring boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框 ...
- PHP学习笔记 - 入门篇(5)
PHP学习笔记 - 入门篇(5) 语言结构语句 顺序结构 eg: <?php $shoesPrice = 49; //鞋子单价 $shoesNum = 1; //鞋子数量 $shoesMoney ...
- 腾讯QQ会员技术团队:人人都可以做深度学习应用:入门篇(下)
四.经典入门demo:识别手写数字(MNIST) 常规的编程入门有"Hello world"程序,而深度学习的入门程序则是MNIST,一个识别28*28像素的图片中的手写数字的程序 ...
- 前端向后台的华丽转身 — PHP入门篇
三个月就这么悄悄溜走了,本K对于前端虽然有了一定的认识,但对一些方面还是处于一种比较萌币的状态,就在这种萌币状态下,本K又跟着大神浩开始了后台语言-PHP语言的学习.PHP的学习对于学过其他语言的人来 ...
- .NET Core实战项目之CMS 第四章 入门篇-Git的快速入门及实战演练
写在前面 上篇文章我带着大家通过分析了一遍ASP.NET Core的源码了解了它的启动过程,然后又带着大家熟悉了一遍配置文件的加载方式,最后引出了依赖注入以及控制反转的概念!如果大家把前面几张都理解了 ...
- Hadoop基础-MapReduce入门篇之编写简单的Wordcount测试代码
Hadoop基础-MapReduce入门篇之编写简单的Wordcount测试代码 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本文主要是记录一写我在学习MapReduce时的一些 ...
- VBScript入门篇
VBScript入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.定义一个过程 定义一个过程:可以将相同的操作的代码提取出来,方便其他人来调用这段代码,可以减少你的代码的重 ...
随机推荐
- Jmeter单个长连接发送多个Sample
Mark自:https://blog.csdn.net/lykangjia/article/details/16337505 1. 线程组,在我们测试方案里面,每个线程模拟一个用户,执行用户的登录.等 ...
- 如何实现Echart不刷新页面,多语言切换下的地图数据重新加载,api请求数据加载,soketed数据实时加载
可视化项目中经常用到ecahrt,各种异步加载,连接socket,多语言切换等问题,现在汇总一下: Ecahrt初始化,全局统一init,可以初始化为0,等待后续数据操作 1.如果是api重新请求,数 ...
- Git——开启区分大小写
前言 默认情况下git是忽略区分大小写的,多人合作的情况下不规范很容易造成问题,所以开启区分大小写. 步骤 开启 全局开启 git config --global core.ignorecase fa ...
- bzoj 2157: 旅游 (LCT 边权)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2157 题面; 2157: 旅游 Time Limit: 10 Sec Memory Lim ...
- LUYA-CDM
下载链接:https://pan.baidu.com/s/11Lq3IWcAcAs9gYbq4mYm1Q 密码:n1kz
- [Windows Server]Windows Server turn off screen auto-lock to fit scheduled tasks(Error Code :0x4F7) / 关闭Windows Server的自动锁定来解决计划任务0x4F7错误
1. 打开“运行”,输入“regedit” 并回车. 2. 找到以下注册表路径,将Attributes的值改为 2: (原为1 HKEY_LOCAL_MACHINE \SYSTEM \CurrentC ...
- 自动化测试框架【windows版】:JMeter + Ant + Jenkins
前提条件:windows安装了jmeter.ant.jenkins 安装方法参考汇总目录中对应的博文 截图看不清的,可以调大浏览器倍数看 jenkins驱动ant执行,ant驱动jmeter执行 an ...
- 【CF1157F】Maximum Balanced Circle
题目大意:给定一个长度为 N 的序列,求是否能够从序列中选出一个集合,使得这个集合按照特定的顺序排成一个环后,环上相邻的点之间的权值差的绝对值不超过 1. 题解:集合问题与序列顺序无关,因此可以先将序 ...
- 07--STL序列容器(Array)
一:Array了解 array<T,N> 模板定义了一种相当于标准数组的容器类型.它是一个有 N 个 T 类型元素的固定序列.除了需要指定元素的类型和个数之外,它和常规数组没有太大的差别. ...
- vue md5
安装 cnpm install js-md5 --save 使用 import md5 from 'js-md5' md5('要加密的内容')