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++ 实例化对象 的相关文章

  • 异步提交或回滚事务范围

    正如许多人所知 TransactionScope当async await Net 中引入了模式 如果我们尝试使用一些它们就会损坏await在事务范围内调用 现在这个问题已经解决了 感谢范围构造函数选项 a 17527759 1178314
  • C 中的隐秘结构定义

    我遇到了以下情况迷宫定义 https github com gduarte lkb blob master code stack maze h code typedef struct mazeNode int hasCheese int t
  • Qt:更改 Mac OS X 上的应用程序 QMenuBar 内容

    我的应用程序对多个 页面 使用 QTabWidget 其中顶级菜单根据用户所在的页面而变化 我的问题是 尝试重新创建菜单栏的内容会导致严重的显示问题 它在除 Mac OS X 之外的所有平台上按预期使用第一种和第三种样式 尚未测试第二种 但
  • 在 C 的公共 API 函数中使用枚举参数是个好主意吗?

    我正在设计一个 C API 其中必须提供一种设置一些双值选项的方法 为了识别选项 我使用以下枚举 typedef enum OptionA OptionB Option 使用是一个好主意吗Option作为公共 API 函数中的参数类型 in
  • 如果将其名称作为参数传递,如何在方法中打开表单

    我正在尝试创建一个标准方法来根据传递给它的参数打开表单 基本上 要完成此任务 using Quotes newQte new Quotes newQte ShowDialog 通过替换 Quotes with a passed parame
  • pybind11 返回 numpy 对象数组

    使用 pybind11 C API 和 python3 我们如何在 C 实现中正确创建一个 numpy 对象数组 即 unicode 字符串 并将其返回给 python 传递到 pybind11 array 的底层数据数组的确切内存布局是什
  • Web API 2 中的方法名称约定 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 是否有 Web API 2 中使用的约定的列表 以这两种方法为例 两者都可以工作 但都没有用属性来装饰 IHttpActionResu
  • SolrNet:尝试添加和提交时 SolrConnectionException (400) 错误请求

    我已经到了 SolrNet 执行 Add 方法的地步 但是当我尝试 Commit 时 我收到了错误 以下是我的 schema xml 模型 调用它的代码以及我得到的错误 更奇怪的是 尽管出现错误 但在我重新启动 Tomcat 后 该模型仍会
  • 在 C99 中,f()+g() 是未定义还是只是未指定?

    我曾经认为在C99中 即使函数的副作用f and g干扰 虽然表达f g 不包含序列点 f and g将包含一些 因此行为将是未指定的 要么 f 在 g 之前调用 要么 g 在 f 之前调用 我不再那么确定了 如果编译器内联函数会怎样 即使
  • 使用 C# 从文本中删除数字

    我有一个要处理的文本文件 其中有一些数字 我只想要其中的文字 而不是其他任何东西 我成功删除了标点符号 但是如何删除数字呢 我想要使 用 C 代码 另外 我想删除长度大于 10 的单词 如何使用 Reg 表达式来做到这一点 您可以使用正则表
  • 如何用C语言创建字典?

    我正在用 C 语言编写一个微控制器 作为它的一部分 我想在 7 段显示器上显示某些字母 每个字母都有一个对应的数字 使 7 段显示屏显示该字母 它没有真正的模式 因为数字只是通过将显示字母所需的 7 段显示器上的位相加而成 因此如果我可以创
  • try-catch 块是否会降低性能[重复]

    这个问题在这里已经有答案了 This link http www cplusplus com doc tutorial exceptions states 为了捕获异常 我们必须将一部分代码放在异常下 检查 这是通过将这部分代码包含在 tr
  • 以编程方式打开网页并以字符串形式检索其 html 包含内容

    我有一个 Facebook 帐户 我想提取我朋友的照片及其个人详细信息 例如 出生日期 就读学校 等 我能够提取我每个朋友帐户的 Facebook 首页的地址 但我不知道如何以编程方式打开我每个朋友首页的网页并将 html 包含保存为字符串
  • 将 LPTSTR 转换为要写入文件的字符串或 char *

    我想将 LPTSTR 转换为字符串或 char 以便能够使用 ofstream 将其写入文件 有任何想法吗 Use T2A http msdn microsoft com en us library 87zae4a3 VS 80 aspx宏
  • C# 从字符串变量中获取类型并在泛型方法中使用它

    我希望能够通过某种方式 即从数据库 获取我收到的字符串值的实际类型 这样我就可以在通用方法中使用该类型 例如DoSomething
  • Visual Studio 扩展找不到所需的程序集

    我为 Visual Studio 2013 编写了一个扩展 因为该死的组合框错误 https stackoverflow com questions 7800032 cancel combobox selection in wpf with
  • 如何收集和存储tellp()、tellg()返回类型?

    我正在编写一个在文件中维护 linked list 的程序 因此 我通过使用tellp tellg 遍历文件并将其添加到特定的长整数 可以视为偏移量 以到达新位置 一个简单的例子是 long next offset sizeof long
  • 防止使用不完整类型实例化模板类

    我正在写一个库 它的布局看起来类似于 A h include
  • 复杂对象上的 GroupBy(例如 List

    Using GroupBy and Count gt 1我试图在列表中查找我的类的重复实例 该类看起来像这样 public class SampleObject public string Id public IEnumerable
  • 同时使用多个控制台

    是否有捷径可寻 我现在仅使用控制台测试我的网络应用程序 最好的办法是从一个项目中拥有多个控制台 然后按一下 立即调试 菜单项 我可以像过去一样使用多个项目 但这似乎很笨拙 理想情况下 我可以启动多个控制台实例 从同一线程运行很好 并且让它们

随机推荐

  • 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指针