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入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.定义一个过程 定义一个过程:可以将相同的操作的代码提取出来,方便其他人来调用这段代码,可以减少你的代码的重 ...
随机推荐
- 一入OI深似海 2 —— 初中三年,颓废PJ
初中,OI似乎没有真正进入我的生活. 三年PJ在我的生活中占比很少. 每天都是平淡无奇的文化课,晚上在写完作业之后还能休息一会儿. 每周六下午的OI课很短暂, 大部分时间我还是把我的重心放在学习上. ...
- Spring自动注入之@Autowired、@Resource、@Inject
相同点: 三者都支持对spring bean的自动注入 不同点: ①Autowired按照类型进行注入( Bean bean = applicationContext.getBean(Bean.cla ...
- Django内置分页
一.django内置分页 from django.shortcuts import render from django.core.paginator import Paginator, EmptyP ...
- Consecutive Sum LightOJ - 1269(区间异或和)
Consecutive Sum 又来水一发blog... 本来是昨天补codechef的题,最后一道题是可持久化字典树,然后去黄学长博客看了看 觉得字典树写法有点不太一样,就想着用黄学长的板子写码几道 ...
- Ubuntu命令整理
linux下find命令的使用和总结 - CS408 - 博客园 ubuntu 命令简写和全称 su:Swith user 切换用户,切换到root用户 cat: Concatenate 串联 u ...
- CSS中各种居中的问题
1.元素水平居中 1.1 在父元素上使用text-align: center; father { text-align: center; } 1.2 margin: 0 auto; 在上一个问题中,我 ...
- js的数组的一些操作
1 arr.reduce let xxx = arr.reduce( function (pv, cv, ci ,arr) { return }[, init_val] ) 对arr的每个元素,执行匿 ...
- (十六)qt-udp,组播
基本流程 简单聊天程序 #include "server.h" #include <QApplication> #include "client.h" ...
- P4177 [CEOI2008]order 网络流,最小割,最大权闭合子图
题目链接 \(Click\) \(Here\) 如果没有租用机器就是一个裸的最大权闭合子图.现在有了租用机器应该怎么办呢? 单独拆点是不行的,因为会和直接买下的情况脱离关系,租借是和连边直接相关的,那 ...
- python模拟蒙特·卡罗法计算圆周率
蒙特·卡罗方法是一种通过概率来得到问题近似解的方法,在很多领域都有重要的应用,其中就包括圆周率近似值的计问题. 假设有一块边长为2的正方形木板,上面画一个单位圆,然后随意往木板上扔飞镖,落点坐标(x, ...