当前位置: 首页 > news >正文

c++ 创建对象 和 使用对象

在C++中,创建和使用对象是面向对象编程的核心部分。对象是类的实例,类定义了对象的属性(成员变量)和行为(成员函数)。以下是关于如何创建和使用对象的详细介绍。

1. 定义类

在创建对象之前,需要先定义一个类。类可以包含数据成员(属性)和成员函数(方法)。

class Dog {
public:// 数据成员std::string name;int age;// 构造函数Dog(std::string n, int a) : name(n), age(a) {}// 成员函数void bark() {std::cout << name << " says Woof!" << std::endl;}void displayInfo() {std::cout << "Name: " << name << ", Age: " << age << std::endl;}
};

2. 创建对象

有多种方式可以创建对象,主要包括以下几种:

2.1. 在栈上创建对象

栈上创建对象是最常见的方式,使用类的构造函数来创建对象。

int main() {// 在栈上创建对象Dog myDog("Buddy", 3);// 使用对象myDog.bark();          // 输出: Buddy says Woof!myDog.displayInfo();   // 输出: Name: Buddy, Age: 3return 0;
}
2.2. 在堆上创建对象

在堆上创建对象需要使用 new 关键字,创建的对象需要手动释放内存。

int main() {// 在堆上创建对象Dog* myDog = new Dog("Max", 5);// 使用对象myDog->bark();          // 输出: Max says Woof!myDog->displayInfo();   // 输出: Name: Max, Age: 5// 释放内存delete myDog;return 0;
}

3. 使用对象

使用对象主要包括调用其成员函数和访问其数据成员。

3.1. 访问成员变量

可以通过点运算符(.)访问栈上对象的成员变量,通过箭头运算符(->)访问堆上对象的成员变量。

int main() {Dog myDog("Buddy", 3);std::cout << myDog.name << " is " << myDog.age << " years old." << std::endl;Dog* anotherDog = new Dog("Charlie", 2);std::cout << anotherDog->name << " is " << anotherDog->age << " years old." << std::endl;delete anotherDog; // 记得释放堆上对象的内存return 0;
}
3.2. 调用成员函数

调用成员函数的方式与访问成员变量相似。

int main() {Dog myDog("Buddy", 3);myDog.bark();          // 输出: Buddy says Woof!Dog* anotherDog = new Dog("Charlie", 2);anotherDog->bark();    // 输出: Charlie says Woof!delete anotherDog;return 0;
}

4. 构造函数与析构函数

  • 构造函数:用于初始化对象,可以有参数(如上例所示),也可以是默认构造函数。
  • 析构函数:在对象生命周期结束时自动调用,用于释放资源。
class Dog {
public:Dog(std::string n, int a) : name(n), age(a) {std::cout << "Dog " << name << " created." << std::endl;}~Dog() {std::cout << "Dog " << name << " destroyed." << std::endl;}
};

5. 总结

在C++中,创建和使用对象是通过类进行的。可以在栈上或堆上创建对象,并通过成员函数和数据成员与对象进行交互。合理使用构造函数和析构函数可以确保对象的有效管理和资源的合理释放。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • LlamaIndex 使用 RouterOutputAgentWorkflow
  • Github 2024-09-02 开源项目周报 Top13
  • mysql的整理
  • AIGC大模型智能擦除:Sanster/IOPaint,python(1)
  • Linux下的exec函数簇
  • 【MySQL】深圳大学数据库实验二
  • c++ +Opencv实现车牌自动识别
  • c++162 类的封装和访问
  • Linux 中的 wget 命令介绍以及使用
  • 行空板上YOLO和Mediapipe视频物体检测的测试
  • linux搭建深度学习平台
  • MAC配置chromedriver
  • IP学习-Sixday
  • 将语义分割的标签转换为实例分割(yolo)的标签
  • Git-如何将本地项目推到GitHub
  • [笔记] php常见简单功能及函数
  • [数据结构]链表的实现在PHP中
  • 【EOS】Cleos基础
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • AWS实战 - 利用IAM对S3做访问控制
  • ES10 特性的完整指南
  • Git初体验
  • JavaScript 奇技淫巧
  • Promise初体验
  • spring + angular 实现导出excel
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • Vue小说阅读器(仿追书神器)
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 从零开始的无人驾驶 1
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 解析带emoji和链接的聊天系统消息
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ​油烟净化器电源安全,保障健康餐饮生活
  • # Maven错误Error executing Maven
  • #android不同版本废弃api,新api。
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • (26)4.7 字符函数和字符串函数
  • (LeetCode) T14. Longest Common Prefix
  • (Oracle)SQL优化基础(三):看懂执行计划顺序
  • (vue)el-tabs选中最后一项后更新数据后无法展开
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (二)fiber的基本认识
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (黑马点评)二、短信登录功能实现
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (三)Honghu Cloud云架构一定时调度平台
  • (一)基于IDEA的JAVA基础12
  • .Net MVC4 上传大文件,并保存表单
  • .net mvc部分视图
  • .Net OpenCVSharp生成灰度图和二值图