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

c++ 类的语法1

类的语法老是记不住,随意写了一个demo, 头文件DemoClass.h文件如下:

#pragma once
class DemoClass
{
private:unsigned m_c;int* m_d;int a;double b;public:DemoClass(); // 默认构造函数. 若用户未定义任何构造函数,编译器才会生成默认构造函数DemoClass(int a, double b); // 带参构造函数//DemoClass(unsigned c, int* d) : m_c(c), m_d(d); // 编译不过, 构造函数声明中‌不能直接写初始化列表‌,初始化列表应仅在类外定义时使用‌。DemoClass(unsigned c, int* d);~DemoClass(); // 析构函数void print() const;
};

源文件DemoClass.cpp内容如下:

#include "DemoClass.h"
#include <iostream>// 内置类型(如 int、unsigned、指针)不会自动初始化,其值为未定义,可能导致未预期行为‌. 所以必须显式初始化所有成员变量。 除非没有成员变量。
DemoClass::DemoClass() : m_c(0), m_d(nullptr), a(0), b(0.0) // 冒号后面初始化参数列表
{ std::cout << "invoke default constructor " << std::endl;
}DemoClass::DemoClass(int a, double b)
{// 也可以用this指针在函数体内部初始化成员变量this->a = a;this->b = b;this->m_c = 0;this->m_d = nullptr;std::cout << "invoke second constructor " << std::endl;
}DemoClass::DemoClass(unsigned c, int* d) : m_c(c), m_d(d){this->a = 0;this->b = 0.0;std::cout << "invoke third constructor " << std::endl;
}DemoClass::~DemoClass() // 释放内存用
{delete m_d; // 注意:不要释放栈内存,即这个指针不能是函数中的局部变量,否则运行是报错。
}void DemoClass::print() const // const表示只读函数,不修改成员变量。 const 函数只能调用其他 const 成员函数,否则会破坏常量性承诺。
{std::cout << "a: " <<  a << ", b: " << b << ", m_c: " << m_c << ", m_d: " << m_d << std::endl;
}

测试代码:

void testClass() {DemoClass demo1;DemoClass demo2(1, 0.1);int* d = new int(9527); // new关键字在堆上分配内存,用完需释放。这里是传到对象里了,在类的析构函数里调用了释放该内存。DemoClass demo3(3, d);demo1.print();demo2.print();demo3.print();
}

打印:

ok

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

相关文章:

  • UI文件上传
  • 深入解析进程与线程:区别、联系及Java实现
  • 设计模式-桥接模式
  • 14.解码器的Mask
  • End-to-End从混沌到秩序:基于LLM的Pipeline将非结构化数据转化为知识图谱
  • 从GET到POST:HTTP请求的攻防实战与CTF挑战解析
  • EF Core中动态加载关联的导航属性
  • 直线轴承的正确安装方式是什么?
  • LeetCode 热题 100_乘积最大子数组(88_152_中等_C++)(动态规划)
  • 虚拟现实(VR)技术在教育领域的创新应用
  • QML中的3D功能--入门开发
  • Chat2DB创始人姬朋飞:AI在 text2sql应用领域的实践
  • Java从入门到“放弃”(精通)之旅——数组的定义与使用⑥
  • 进程程序替换
  • 【橘子大模型】初探rag知识库的构建
  • Linux基础IO(八)之硬链接
  • 完整游戏排行榜系统实现
  • Redux Promise 中间件
  • C++ 数组 array ™实现动画效果全解析⚡YQW · Studio ⚡
  • Http基础
  • QML中的3D功能--自定义着色器开发
  • 硬件操作指南——ATK-MD0430 V20
  • 什么是超类实体和派生属性
  • JavaScript 变量语法扩展
  • C 语言联合与枚举:自定义类型的核心解析
  • Scade 语言词法介绍
  • 游戏引擎学习第235天:在 Windows 上初始化 OpenGL
  • 4N60-ASEMI开关电源与适配器专用4N60
  • 6.7 ChatGPT自动生成定时任务脚本:Python与Cron双方案实战指南
  • android测试依赖