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

C++初阶学习第三弹——类与对象(上)

目录

一.初步认知对象

 二.类的基本组成、

1.类的定义

2.类的访问限定符及封装

3.类的作用域

4、类的大小的计算

5.this指针

三.总结


一.初步认知对象

C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。

而C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。

 二.类的基本组成、

1.类的定义

class A    
{
public:void Init(int year){_year=year;}
private:int _year;int* arr;};

 class是定义类的关键字,  其中A是类的名字,class{}中的是类的主体。

类体中内容称为类的成员:类中的变量称为类的属性或成员变量; 类中的函数称为类的方法或者 成员函数。

类的两种定义方式: 1. 声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。

2. 类声明放在.h文件中,成员函数定义放在.cpp文件中,注意:成员函数名前需要加类名:

 

2.类的访问限定符及封装

1. public修饰的成员在类外可以直接被访问

2. protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)

3. 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止

4. 如果后面没有访问限定符,作用域就到 } 即类结束。

5. class的默认访问权限为private

3.类的作用域

类定义了一个新的作用域,类的所有成员都在类的作用域中。在类体外定义成员时,需要使用 :: 作用域操作符指明成员属于哪个类域。

class Person
{
public:void PrintPersonInfo();
private:char _name[20];char _gender[3];
};void Person::PrintPersonInfo()
{cout << _name << " "<< _gender << " " << _age << endl;
}

 这里需要指定PrintPersonInfo是属于Person这个类域

4、类的大小的计算

class A
{
public:void PrintA(){cout << _a << endl;}
private:int _a;};
int main()
{cout << sizeof(A) << endl;return 0;
}

 类在计算大小的时候,是不计算函数大小的

一个类的大小,实际就是该类中”成员变量”之和,当然要注意内存对齐。

5.this指针

class Date
{ 
public:void Init(int year, int month, int day){_year = year;_month = month;_day = day;}void Print(){cout <<_year<< "-" <<_month << "-"<< _day <<endl;}private:int _year;     // 年int _month;    // 月int _day;      // 日
};
int main()
{Date d1;d1.Init(2022,1,11);d1>printf();return 0;
}

以上代码printf()按理来说应该有一个形参,可是实际却没有,因为类成员函数参数中是有一个默认的this指针表示创建的类变量的地址

以上代码实际是这样。

class Date
{ 
public:void Init(int year, int month, int day){_year = year;_month = month;_day = day;}void Print(Date* this){cout <<this->_year<< "-" <<this->_month << "-"<<this-> _day <<endl;}private:int _year;     // 年int _month;    // 月int _day;      // 日
};
int main()
{Date d1;d1.Init(2022,1,11);d1>printf();return 0;
}

三.总结

希望给大家带来一定的帮助,下节我会接着讲解关于类和对象—中阶的内容

感谢大佬们的支持。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • vue的nextTick的作用
  • leetcode-136. 只出现一次的数字
  • C#中的异步编程:如何有效地使用async和await关键字以提高应用程序的性能和响应性
  • 【linux】在多核CPU下,好像看到不同进程在不同CPU调度
  • vue js 将对象转换为 JSON 字符串 ;将 JSON 字符串转换为对象
  • 人工智能与机器学习原理精解【9】
  • SQL进阶技巧:车辆班次问题分析
  • Typescript配置文件(tsconfig.json)详解系列四:esModuleInterop和allowSyntheticDefaultImports
  • Redis7-入门-安装
  • C#使用csvhelper实现csv的操作
  • 【数据采集与可视化案例】基于python的国家级非物质文化遗产数据采集与可视化分析
  • 【漏洞扫描器】使用nessus扫描工具扫描服务器,并生成漏扫报告
  • SpringBoot Vue用自签名证书SSL配置https,http转发到https(整理文章)
  • test1111
  • 【前端】fis框架学习
  • 【391天】每日项目总结系列128(2018.03.03)
  • angular组件开发
  • express.js的介绍及使用
  • interface和setter,getter
  • magento 货币换算
  • Python - 闭包Closure
  • SpringBoot 实战 (三) | 配置文件详解
  • 闭包--闭包之tab栏切换(四)
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 使用SAX解析XML
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 小程序开发之路(一)
  • 字符串匹配基础上
  • Linux权限管理(week1_day5)--技术流ken
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ​插件化DPI在商用WIFI中的价值
  • #{} 和 ${}区别
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (12)目标检测_SSD基于pytorch搭建代码
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (2024,RWKV-5/6,RNN,矩阵值注意力状态,数据依赖线性插值,LoRA,多语言分词器)Eagle 和 Finch
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (PySpark)RDD实验实战——取最大数出现的次数
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (代码示例)使用setTimeout来延迟加载JS脚本文件
  • (附源码)springboot教学评价 毕业设计 641310
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (六)vue-router+UI组件库
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (转)shell中括号的特殊用法 linux if多条件判断
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • .gitignore文件---让git自动忽略指定文件
  • .NET 回调、接口回调、 委托