C++ 实例化对象

2023-11-19

实例化对象:

意味着一定有调用构造函数 

实例化就是给,数据成员分配内存,构造对象。对象的成员函数和普通函数的区别就是,成员函数有个指向当前对象的this指针,可以访问对象的成员变量,其依赖于对象。静态函数就更像一个全局函数,没有this指针,可以通过类名直接访问,可以被对象的成员函数访问,静态函数只能访问类的静态成员。这些可访问属性是由编译器来实现的,编译之后就没有对象、成员这些东西了,都是数据和方法。

一.在栈区实例化对象

1.调用无参构造函数实例化对象   类型名 ---  class/struct类型
	类型名 对象名;
	类型名 标识符();   //函数声明   不是实例化对象
	类型名();         //匿名对象
2.调用有参构造函数
	类型名 对象名(实参列表);
	类型名(实参列表);   //匿名对象
#include <iostream>
#include <string>
using namespace std;

class stu
{
private:
	//成员属性
	int no;
	string name;
	int score[3];
public:
	//构造函数  默认的无参构造函数 默认的无参构造编译会自动提供	
	stu()
	{
		cout << "无参的构造函数: " << endl;
	}	
	//用于给成员属性初始化
	void init(int ino,string iname,int iscore[3])
	{
		no = ino;
		name = iname;
		for(int i = 0;i< 3;i++)
			score[i] = iscore[i];
	}	
	void show()
	{
		cout << "学号: " << no << "姓名: " << name << "成绩: ";
		for(int i = 0;i<3;i++)
			cout << score[i] << " ";
		cout << endl;	
	}
};



int main()
{
	stu s;//实例化一个对象
	//调用一下init和show方法
	int score[3] = {88,65,95};
	s.init(110,"马化",score);
	s.show();
	stu s1(120,"马云",score); //实例化对象 调用构造函数 传递三个参数
	s1.show(); 
	return 0;
}

匿名对象:

	没有名字的对象,直接用类型名(实参列表);来构造
	经常在函数中会返回匿名对象  或者 在调用函数时 传递匿名对象
	往往会直接用变量(形参)去接收匿名对象  
	这个过程会进行优化 直接让变量"引用"该匿名对象
		如果不优化:1.调用拷贝构造  2.调用拷贝赋值函数    拷贝过程
	类型名 对象名 = 匿名对象;//优化

生命周期:

class Cat
{
public:
    Cat()
    {
        cout<<"Cat类 无参构造函数"<<endl;
    }

    Cat(Const Cat& obj)
    {
        cout<<"Cat类 拷贝构造函数"<<endl;
    }

    ~Cat()
    {
        cout<<"Cat类 析构函数 "<<endl;
    }

};

void playStage() //一个舞台,展示对象的生命周期
{
    Cat();             /*在执行此代码时,利用无参构造函数生成了一个匿名Cat类对象;执行完此行代码, 因为外部没有接此匿名对象的变量,此匿名又被析构了*/
    Cat cc = Cat();    /*在执行此代码时,利用无参构造函数生成了一个匿名Cat类对象;然后将此匿名变 成了cc这个实例对象,此匿名对象没有被析构。*/
    cout<<"cc 对象好没有被析构"<<endl;    
}

int main()
{
    playStage();
    system("pause");
    return 0;
}
二、在堆区实例化对象
类型名 *指针变量 = new 类型;  //调用无参构造函数实例化对象
类型名 *指针变量 = new 类型();//调用无参构造函数实例化对象
类型名 *指针变量 = new 类型名(实参列表); //调用有参构造函数
#include <iostream>
#include <string>
using namespace std;


class yg
{
private:
	int no;
	string name;
	string departname;
	float money;	

public:
	
	yg(int ino,string iname,string idepartname,float imoney)
	{
		cout << "四个参数的构造函数" << endl;
		no = ino;
		name = iname;
		departname = idepartname;
		money = imoney; 
	}
	//会自行添加午餐构造函数
	yg()
	{
		cout << "无参构造函数" << endl;
	}
	void show()
	{
		cout << "员工号:" << no << " 名字:" << name << " 部门名称:" << departname << " 工资:" << money << endl;
	}

};

int main()
{
	//yg s1;
	//yg s2(110,"马云","阿里巴巴",10000);
	//s2.show();	
	//emp e4 = emp(122,"马云","阿里巴巴",1.0);//右边是一个匿名对象 ,左边是一个同类型的对象
	//进行了优化 直接让e4指向匿名对象
	//emp().show;
	
	//emp *pe2 = new emp;//调用无参构造函数实例化对象
	//emp *pe3 = new emp();//调用无参构造函数实例化对象
	//delete pe2;
	//delete pe3;
	
	yg *pe2 = new yg(110,"马云","阿里巴巴",10000);
	pe2->show();
	
	return 0;
}
注意:
	类型名 *指针变量 = (类型名*)malloc(sizeof(类型名));
	没有实例化对象  没有调用构造函数   只分配了内存空间
	
普通对象访问成员属性和调用成员函数用  .
类指针访问成员属性和调用成员函数时用  ->    (*指针变量).

new 类型名(实参列表);   //匿名对象  无法delete内存

数组对象:
	定义类类型成员的数组
	类型名 数组名[数组长度];  //调用类型的无参构造函数
	类型名 数组名[数组长度] = {类型(实参列表),...};
	
	类型名 *指针 = (类型*)malloc(sizeof(类型)*len); //只分配内存 不会调用构造函数
	类型名 *指针 = new 类型[数组长度]; //调用无参构造函数
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 实例化对象 的相关文章

随机推荐

  • unity期末个人作品-落笔洞寻宝探险之旅(寻宝游戏)

    落笔洞寻宝探险之旅 unity寻宝游戏 下载链接在文章下方 为了增添生活的乐趣开发的这款落笔洞寻宝游戏 主要内容为人物在落笔山脉寻找金币 右上角有金币计数器 找到所有金币则获胜 山中有障碍物 触碰会掉血50 人物生命值为100 血量为0则游
  • 实验6Hive分组排序

    实验6Hive分组排序 实验目的及要求 掌握Hive中全局排序Order by 内部排序Sort by的用法及区别 掌握Hive中Group by分组语句的用法 了解Hive中Distribute By分区排序 Group By及Clust
  • 成年人正确学英语的方式

    成年人正确学英语的方式 本人女 毕业两年 2020年3月份开始准备考试商务英语bec的考试 到2020年5月29号考试 期间准备了3个月 最终以165分的成绩通过商务英语bec中级考试 本着以热爱学习乐于分享的精神 给大家开源下我的bec的
  • 【历史上的今天】10 月 2 日:ENIAC 计算机退休;贝尔德发明电视;香港科技大学办学

    整理 王启隆 透过 历史上的今天 从过去看未来 从现在亦可以改变未来 今天是 2021 年 10 月 2 日 在历史上今天发生的科技关键事件不比昨天要少 举世闻名的通用电子计算机 ENIAC 便在今天退休 我国享誉世界的学府香港科技大学正式
  • vector的讲解及模拟实现(c++)

    为了方便大家理解我们边模拟实现vector容器的常用操作 然后根据代码讲解如何使用vector的这些功能 这样的话相信可以帮助大家更好的理解vector 目录 一 vector的介绍 二 vector模拟实现的讲解 1 vector的模块分
  • 计算机两个硬盘如何区分,双硬盘电脑怎么设置主从盘?

    随着电脑中存储的资料逐步增加 我以前电脑的硬盘空间严重不足 所以我购买了一块新硬盘 但是 两块硬盘放在一起工作后 经常发生死机 运行速度慢等问题 我查了很多资料后 最终确定是主从盘设置方面出的问题 本文将为大家介绍我是如何解决问题的 一 区
  • 毕业设计-基于深度学习的新闻推荐算法研究

    目录 前言 课题背景和意义 实现技术思路 基于深度学习的新闻推荐方法 1 DNR中的 两段式 方法 2 DNR中的 融合式 方法 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备
  • ubuntu的root用户ssh远程登录问题

    ubuntu默认不允许root远端登录 其它创建的用户默认是可以的 编辑ssh服务的配置文件 cd etc ssh 修改sshd config文件 设置允许root用户远程登录 找到 PermitRootLogin prohibit pas
  • R语言基础——缺失数据

    R语言基础 缺失数据 缺失数据的分类 统计学家通常将缺失数据分为三类 它们都用概率术语进行描述 但思想都非常直观 我们将用sleep研究中对做梦时长的测量 有12个动物有缺失值 来依次阐述三种类型 1 完全随机缺失 若某变量的缺失数据与其他
  • 问题(四)No matching distribution found for anyjson==0.3.3

    前言 本章主要讲述安装anyjson时提示 No matching distribution found for anyjson 0 3 3 的解决方案 一 问题描述 描述 批量下载第三方包时 提示 找不到anyjson0 3 3的匹配分布
  • 卷积神经网络识别花卉并分类另保存

    本篇博客转载自卷积神经网络训练花卉识别分类器 本篇博客的所有代码已上传至GitHub仓库 后续会更新各个文件夹及文件的详细说明 用者自取 由于卷积神经网络训练花卉识别分类器博客已将模型的训练 测试代码写好 且可以通过这篇博客获取到大神训练好
  • 获取,设置HTML控件位置

    得到HTML控件的位置 var v document all oo getBoundingClientRect 设置HTML控件的位置 dd style top v top dd style left v left
  • 关于2018网易游戏web前端实习生面试经历

    去年报名的网易前端面试 没想到过了3个月居然收到了面试的通知 心里也是激动 花了一天时间面试 自己总结一下面试过的问题 问题可能不全 但是这些是我所能记起来的问题 一面 1 css高度坍塌 两个盒子 一个下边据20px 一个上边据50px
  • Vue3项目创建

    1 新建一个文件夹 存放路径 2 Ctrl A选中路径 输入cmd 3 打开之后 输入vue create my project my project可以任意定义 这里作者用的vue3 study Please pick a preset
  • 基础目标检测算法CNN、RCNN、Fast RCNN、Faster RCNN

    基础目标检测算法介绍 CNN RCNN Fast RCNN和Faster RCNN 1 CNN 问题 输入尺寸固定 对于普通的CNN网络 由于输入图片中的物体可能有不同的长宽比 空间位置 目标物体可能占据图片的大部分 也可能是一小部分 目标
  • XSS挑战之旅平台通关练习level1-level6

    部署容器 进入XSS挑战之旅 首先需要关闭防火墙 输入以下命令进行关闭 gt systemctl stop c gt firewall cmd h c gt systemctl stop firewalld service gt syste
  • mssql数据库和Oracle数据库注入

    MS SQL Server注入 简介 MS SQL Server是微软推出的一款数据库产品 主要面向中小企业 其最大的优势就是在于集成了微软公司的各类产品及资源 提供了强大的可视化界面 高度集成的管理开发工具 在快速构建商业智能 BI 方面
  • java解决redis缓存与数据库一致性问题

    一 如何利用Redis缓存优化数据库性能 使用 Redis 缓存可以有效地提升数据库的性能和响应速度 下面是一些常见的 Redis 缓存优化技巧 对热点数据进行缓存 通过分析系统的访问模式 找出经常被访问的热点数据 缓存到 Redis 中
  • 设置背景图片不平铺

    图片路径 background image url static demo jpg 不平铺 background repeat no repeat 居中显示 background position center 拉伸占满整个容器 backg
  • C++ 实例化对象

    实例化对象 意味着一定有调用构造函数 实例化就是给 数据成员分配内存 构造对象 对象的成员函数和普通函数的区别就是 成员函数有个指向当前对象的this指针 可以访问对象的成员变量 其依赖于对象 静态函数就更像一个全局函数 没有this指针