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

十一(2) 类的实例化

1.构造函数

函数名必须与类名相同,且没有返回值类型

构造函数调用时机

在定义对象同时自动被调用,且仅被调用一次

Human h;    // 创建类的这个时候就会调用构造方法
  • 对象定义语句
/*构造函数
*/
Human(int age, const char* name);Human::Human(int age,const char* name)
{cout << "Human 构造函数被调用..." << endl;this->age = age;strcpy_s(this->name, name);
}void getInfo(){cout << "age = " << this->age << " name = " << this->name << endl;};int main()
{Human h(20,"wyd");// h.setInfo(20, "wyd");h.getInfo();   // age = 20 name = wyd
}
  • new 操作符
构造函数重载
  • 构造函数可以重载

    • 构造函数也可以通过参数表差别化形成重载

    • 重载的构造函数,通过构造函数的实参类型进行匹配

    • 不同的构造函数,表示对象的不同创建方式

class HO
{
public:HO();~HO();HO(int age){this->age = age;this->name = "";cout << "HO(int age)" << endl;}HO(int age, const char* name){this->age = age;this->name = name;cout << "HO(int age,const char* name)" << endl;}void getInfo(){cout << "age = " << age << " name = " << name << endl;}private:int age;string name;
};HO::HO()
{cout << "HO() ~ " << endl;this->age = 0;this->name = "";
}HO::~HO()
{
}int main()
{HO hq1;   // 调用无参的构造方法hq1.getInfo();HO hq2(20);  // 调用一个参数的构造方法hq2.getInfo();HO hq3(25,"cls");  // 调用两个参数的构造方法hq3.getInfo();
}输出内容:HO() ~
age = 0 name =HO(int age)
age = 20 name =HO(int age,const char* name)
age = 25 name = cls
    • 使用缺省参数可以减少构造函数重载的数量

  • 构造函数分类

    • 多参数构造函数:按多参方式构造

    • 无参(缺省)构造函数:按无参方式

    • 类型转换构造函数:利用不同类型的对象构造

    • 拷贝构造函数:利用相同类型的对象构造

构造函数的作用
  • 定义对象的各个成员变量并赋初始值。设置对象的初始状态

  • 在对象定义之初想实现的任何操作

对象的创建过程
  • 为整个对象创建内存空间

  • 以构造实参调用构造函数

    • 定义成员变量

    • 执行构造代码

2. 类的声明和实现

类的声明实现可以分开实现

class 类名{

返回类型 函数名 (形参表); // 声明

}

返回类型 函数名::函数名 (形参表) //实现

{

函数体;

}

将类的声明,实现与实现分别放在不同的文件中

//Human.h文件  -- 声明

class Human{
    
    
public:
    
    Human();
    void getInfo();
    
private:
    int age;
}

----------------------------------------

// Human.cpp --  实现
    
#include "Human.h"
    
Human:Human()
{
    
}

void Human::getInfo()
{
    
}


--------------------------------------
    
// Main.cpp
    
#include "Human.h"
    
 int main()
{
    
    Human h;
    
    h.getInfo();
    
}
    

3. 定义对象的几种方法

对象的定义与销毁
1.在栈中定义单个对象
  • 类名 对象;

Human h1;
  • 类名 对象(实参表);

Human h2(20,"wyd");
2.在栈中定义对象数组
  • 类名 对象数组[元素个数];
Human h3[3];   // 定义3个Human对象for(int i = 0; i < 3; i++)
{h3[i].getInfo();
}
  • 类名 对象数组[元素个数] = {类名(实参表)...};
Human h4[3] = {Human(20,"wyd"),Human(20,"wyd"),Human(20,"wyd")
};
  • 类名 对象数组[] = {类名(实参表)...};
Human h5[] = {Human(20,"wyd"),Human(20,"wyd"),Human(20,"wyd")
};
3.在堆中定义/销毁单个对象(new出来的对象声明周期不短暂)
  • 类名* 对象指针 = new 类名;

  • 类名* 对象指针 = new 类名();

  • 类名* 对象指针 = new 类名(实参表);

  • delete 对象指针;

4.在堆中定义/销毁对象数组
  • 类名* 对象数组指针 = new 类名[元素个数];

  • 类名* 对象数组指针 = new 类名[元素个数]{ 类名(实参列表)...};

  • delete[] 对象指针数组;

http://www.xdnf.cn/news/934975.html

相关文章:

  • 打卡第48天
  • 系统思考:跳出症状看全局
  • 第35周综合就业指南
  • 深入剖析AI大模型:用神经网络构建医疗影像辅助诊断系统
  • Compose笔记(二十六)--DatePicker
  • LeetCode 1723: 完成所有工作的最短时间
  • 大数据+智能零售:数字化变革下的“智慧新零售”密码
  • LLMs 系列科普文(5)
  • 大模型外挂MCP教程(8): 飞算JavaAI智能分析搭建自己的MCP Server
  • godot小白入门前的一些前置知识了解
  • 深入了解linux系统—— 共享内存
  • BERT
  • 【数据结构】图论基石:最小生成树(MST)实战精解与Prim/Kruskal算法详解
  • LLMs之PE:system-prompts-and-models-of-ai-tools的简介、使用方法、案例应用之详细攻略
  • 掌握 HTTP 请求:理解 cURL GET 语法
  • 基于dify的营养分析工作流:3分钟生成个人营养分析报告
  • 【HarmonyOS5】掌握UIAbility启动模式:Singleton、Specified、Multiton
  • 探究 Java SPI 原理与实战_打造高扩展性的应用架构
  • 【笔记】结合 Conda任意创建和配置不同 Python 版本的双轨隔离的 Poetry 虚拟环境
  • Razor编程中@Helper的用法大全
  • Android Firebase 推送问题排查指南
  • NVM常用命令记录
  • 基于PHP的扎染文创产品商城
  • 【OpenCV】使用opencv找哈士奇的脸
  • Linux云原生架构:从内核到分布式系统的进化之路
  • 【机器学习】PCA主成成分分析
  • 浏览器兼容-polyfill-本地服务-优化
  • 使用 C/C++的OpenCV 实时播放火柴人爱心舞蹈动画
  • 第6章:Neo4j数据导入与导出
  • 免费批量Markdown转Word工具