C++类与对象

2023-05-16

C++面向对象

一.面向对象程序设计方法概述

1.凡是以类对象为基本构成单位的程序称为基于对象的程序
2.面向对象面向过程的区别:
在笔者看来,通俗地讲,“面向对象”就是在描述一个对象,“面向过程”则是在描述一个过程
在程序设计方面,“面向过程”的特点是以过程为主,分析问题时,着眼于解决问题的步骤,并通过代码实现这些步骤。值得注意的是,面向过程不会对问题进行抽象总结,也就是说当我们面对一个问题时,“面向过程”思想会驱使我们用某一种方法去实现,一千个问题就会有一千种具体实现
而“面向对象”的特点是以对象为基础,解决问题时会对问题进行抽象总结,这是“面向对象”最核心的特点。这避免了代码重复

3.面向对象程序设计有四个主要特点
抽象 封装 继承 多态性
抽象:一个类即是类中所有对象的抽象体,类包含了所有对象的共同属性(特点)行为(方法)
封装:有选择性地限制外界访问类/对象中的属性与方法。
继承:子类(子对象)可继承父类(父对象)的的属性和方法,而子类可在父类的基础上增加特有的属性和方法。“继承”这一特性避免了代码重复
多态性:不同类的对象对同一消息做出反应。
那么四个特点分别有什么作用呢?
总的来说, 抽象是对类的概括,封装则是对的类的包装,继承减少代码重复,多态性则有助于代码的扩展延申

二.理解类与对象

1.类与对象的关系
类是对象的抽象总结,而对象是类的具体实例。
类是对象的模板,类似于结构体类型是结构体变量的模板,C++中我们要先声明一个结构体类型,然后用它去定义结构体变量;同样地,C++中我们要先声明一个类类型,然后用它去定义若干个对象
内存上,类是抽象的,因而类不占用内存,而对象是具体的,因而对象占用存储空间

2.类的声明
class 类名
{
private:
私有的数据和成员函数
public:
公有的数据和成员函数
}

3.对象的定义
两种方法
一是先声明类类型,再定义对象
二是在声明类的同时定义对象
(这里不作具体讲述)

4.访问对象成员
(注意:类外只能访问public成员,除非是调用函数)
三种访问方法
法1:对象名.成员名

//定义一个学生类
class Student
{
	public:
		int id;
		string name;
		viod display()
		{
			cout<<"I'm a student.";
		}
};
//定义一个学生对象
Student stu1;
//通过对象调用公有数据成员
stu1.name
stu1.id
//通过对象调用公有函数成员
stu1.display()
	

法2:通过指向对象的指针访问对象中的成员

Student *p;
p->name
p->id
p->display
//或者
(*p).name
(*p).id
(*p).display

法3:通过对象的引用来访问对象中的成员

Student stu1;
Student &s=stu1;//s相当于是stu1的别名
s.id
s.name
s.display()

三.如何使用类与对象

1.构造函数
首先,构造函数就是与类同名的函数(是系统内置的,意思就是就算你不定义,系统也会自带一个构造函数)。
其次,构造函数是可以重载的,所谓重载就是认为地改变形参。
记住,构造函数是用来对数据成员赋值的。

class Student 
{
	private:
		int id;
		string name;
	public:
		Student()//这就是人为定义Student类的构造函数
		{
			id=0;
			name=" ";
		}
		Student(int a,string b)
		{
			this->id = a;//其实this可以不写,系统自带
			this->name = b;
		}
		Student(int a,string b):id(a),name(b){}
		//重载构造函数,同上,只是形式不同
}

2.析构函数
首先它的写法是:~类名()
其次,C++中“~”是位取反运算符,由此可知,析构函数是与构造函数作用相反的函数。当对象生命期结束时,会自动执行析构函数,设立构造函数最初的目的是为了释放对象占用的空间,但除此之外,它也可以用来执行“用户希望再最后一次使用对象之后所执行的任何操作”

class Student 
{
	 private:
	  	int id;
	  	string name;
	 public:
		  Student()//构造函数
  		~Student()//自行定义的析构函数
		  //但记住析构函数不能重载也就是不能自行加形参
		  {
		  	cout<<"I'm a student.";
		  }
  };

3.调用构造函数和析构函数的顺序
二者调用顺序相反
一般而言,最先被调用构造函数的对象的析构函数将最后被调用。

#include <bits/stdc++.h>
class Student
{
	private:
		int id;
		string name;
	public:
		Student(int a,string b);
		{
			id=a;
			name=b;
		}
		~Student()
		{
			cout<<"id="<<this->id<<endl;
		}
}stu1,stu2;
int main()
{
	Student stu1(1,A);
	Student stu2(2,B);
	return 0;
}
//系统最后会输出
id=2//stu2的析构函数
id=1//stu1的析构函数




		
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++类与对象 的相关文章

  • UEFI BIOS模式下Windows系统启动过程以及引导文件修复方法

    有关UEFI BIOS基础知识的简介 xff0c 一年前在网易博客做过详细的概述 鉴于某些网友仍然对UEFI下Windows的启动过程不甚了解 xff0c 虽然网上有各式各样的启动修复工具 xff0c 但是对于新手来说 xff0c 如果不明
  • spark python脚本在命令行的执行方法

    有时候我们的pyspark代码需要在服务器上运行 xff0c 那么具体的运行方法是什么呢 xff1f pysprk aa py 只需要在pyspark后面写上自己想要运行的python文件即可 xff0c 是不是很简单 xff0c 哈哈哈
  • 迁移Linode服务器

    迁移Linode服务器 从美国将Linode的一个服务器迁移到日本的机房 xff1a 1 首先为了保证数据的完整性 xff0c 把两台VPS主机都关机 2 到新的VPS主机控制面板那样把Disk Image和Swap Image给删除了 x
  • JAVA 正则表达式 (超详细)

    新网站上线 欢迎大家 网站交易中心 在这里你可以购买或者出售你的网站 网站信息发布中心 在这里有各种交易信息的发布 同时提供 一些软件的免费使用 xff08 附有源码 xff09 网站博客系统 这里你可以注册自己的博客 一个账户无限量博客
  • mysql查看binlog日志内容

    mysql的binlog日志位置可通过show variables like 39 datadir 39 查看 xff0c 直接打开无法查看 xff0c 要看其内容2个办法 xff1a 1 登录到mysql查看binlog 只查看第一个bi
  • 常用模拟器及ROM下载地址

    Nintendo Nintendo Entertainment System Super Nintendo Entertainment System Nintendo 64 Project64 https www pj64 emu com
  • Linux下安装jdk配置报错:-bash: java: command not found

    可能是jdk解压有问题 xff0c 重新解压然后source etc profile xff1a 使配置生效 再 java version来查看配置成功没
  • IP地址段范围写法

    A类IP段 0 0 0 0 到127 255 255 255 B类IP段 128 0 0 0 到191 255 255 255 C类IP段 192 0 0 0 到223 255 255 255 XP默认分配的子网掩码每段只有255或0 xf
  • 有时间细读这些书

    1 Windows程序设计 第5版 珍藏版 xff1a 这是很经典的一本介绍Win32 API编程的书了 xff0c 基本介绍到了大多数关于Windows程序设计的基本内容 2 Windows程序设计 王艳平版 xff1a 这本和上一本的区
  • linux中systemctl详细理解及常用命令

    一 systemctl理解 Linux 服务管理两种方式service和systemctl systemd是Linux系统最新的初始化系统 init 作用是提高系统的启动速度 xff0c 尽可能启动较少的进程 xff0c 尽可能更多进程并发
  • Linux查看网速命令

    watch 34 ifconfig eth0 grep byte 34
  • 软件正在改变世界,程序员应该得到足够尊重

    软件无处不在 xff0c 越来越多的人离不开软件 xff0c 你打开电脑 xff0c 你使用手机 xff0c 你购物娱乐 软件一直在帮你 xff0c 软件已经渗透到我们的工作 生活 娱乐的方方面面 xff0c 软件每一天都在改变着这个世界
  • apache2.4 配置多个版本的 php7,php8)

    不多说 xff0c 直接上配置修改 httpd conf lt IfDefine php7 gt Listen 82 LoadFile 34 D php 7 2 34 libssh2 dll 34 LoadModule php7 modul
  • 叉乘怎么记忆,计算

    以一个例子直观记忆叉乘 xff1a 引用自 向量积 百度百科 baidu com 在这个式子中 xff0c 我们可以清楚地看到三项分别是i xff0c j xff0c k 前面则是他们的系数 我们可以直接把i xff0c j xff0c k
  • 接口防重方案设计

    幂等性原理 xff1a 前台的多次请求 xff0c 对于后台 xff0c 也是同一次请求 xff1b 通常接口设计方式 xff1a 1 前端的页面提交按钮置灰 xff0c 防止用户重复点击 xff1b 2 对前端提交的token进行校验 x
  • Spark Streaming 与 Kafka 集成分析

    前言 Spark Streaming 诞生于2013年 xff0c 成为Spark平台上流式处理的解决方案 xff0c 同时也给大家提供除Storm 以外的另一个选择 这篇内容主要介绍Spark Streaming 数据接收流程模块中与Ka
  • 微信小程序-轮播图实现

    好久不见 xff0c 今天小h来分享一下如何实现一个微信小程序的轮播图实现方式 xff1a 前提条件是具有微信开发者工具 xff0c 还有对应的开发者ID xff0c 这些基础条件我这边就直接跳过了哈 xff0c 直接进入正题 xff1a
  • 所以,到底什么是微服务?

    1 微服务是一种软件架构 xff0c 是聚焦在单一的职责和业务功能 xff0c 具有独立的进程 xff0c 能够单独运行的服务 xff0c 并且与外部服务是通过HTTP进行交互通信的服务 2 微服务比较常见的特性是 xff0c 具有单一职责
  • 关于云服务Bmob的使用方法(上)——上传数据

    关于第三方云服务平台Bmob是怎样使用的 xff1f 我们从两个方面来写 xff0c 一个是传输数据 xff0c 一个是传输文件 第一个是关于bmob传输数据的 xff0c 首先我们在官网http www bmob cn 上面注册我们自己的
  • 关于云服务Bmob的使用方法(下)——上传文件

    上一篇我们说了如何传输数据 xff0c 那么这一篇我们进阶一下 xff0c 来谈谈如何传输文件 xff0c 比如图片 关于如何在bmob上注册和申请 xff0c 上一篇已经有说明 xff0c 不懂的读者可以去看看 xff0c 然后我们直接进

随机推荐

  • 使用栈模拟递归的算法

    这一篇笔者要讲的是如何用栈来模拟递归 xff0c 或者说替代递归的算法 xff0c 现在我们假如要算从三角形数的叠加 xff0c 比如输入10 xff0c 输出是55 xff0c 输入是100 xff0c 输出是5050 xff0c 等等
  • java集合篇(一)——ArrayList扩容原理

    相信大家都对ArrayList相当熟悉了 xff0c 今天笔者就对ArrayList的源码进行解读 xff0c 讲解一下对ArrayList扩容的基本原理 虽然大家都有用过 xff0c 但还是简单介绍一下吧 xff0c ArrayList实
  • 怎样快速开发一个 Dubbo 应用?

    背景 本文将以 Dubbo 为例 xff0c 介绍如何快速开发一个 Dubbo 应用 为了便于读者理解 xff1a 首先会介绍一下传统的 RMI 的基本概念 然后比较下现代的 RPC 框架与 RMI 的区别 再基于 Dubbo 提供的 AP
  • 百度历届笔试题(1)

    题目描述 牛牛和妞妞正在玩一个猜数游戏 xff0c 妞妞心里想两个不相等的正数 xff0c 把这两个正数的和y告诉牛牛 妞妞声称这两个数都不超过x xff0c 让牛牛猜这两个数是多少 牛牛每猜一次 xff0c 妞妞会告诉他猜对了还是猜错了
  • systemd service 配置自启动,配置多个环境变量,最大打开文件数

    一 创建service文件 样例 vim usr lib systemd system nacos service Unit Description 61 nacos After 61 network target Service Type
  • IntelliJ IDEA 架构概述(面向插件开发者)

    原文未定稿 2014 11 这篇文章的目的是从插件开发者的视角描述IntelliJ IDEA的结构 文章将以一种任务驱动的方式组织 xff1a 相比列出所有你可以对各组件对象进行的操作并描述这些操作它们的实现方式 xff0c 这篇文章将尽可
  • 用大数据思维做运维监控

    今天一大早就看到了一篇文章 xff0c 叫 大数据对于运维的意义 该文章基本上是从三个层面阐述的 xff1a 工程数据 xff0c 譬如工单数量 xff0c SLA可用性 xff0c 基础资源 xff0c 故障率 xff0c 报警统计业务数
  • 仿滴滴抢单倒计时的Demo

    滴滴里面有一个下单完成之后等待界面的倒计时转圈的视图 就是这个 原理 xff1a 通过CAShapeLayer层添加到自己自定义的视图layer上 设置ShapeLayer的path 他的路劲绘制一般通过UIBezierPath配合设置 通
  • iOS开发之自己封装的提示框(警告框)样式BHAlertView

    最近需要使用到提示框 xff08 警告框 xff09 进行信息的展示和提醒 xff0c 所以进行了一个类的封装 xff0c 想用Swift调用此OC文件 xff0c 但是发现有些困难 xff0c 所以暂时先把OC代码进行展示 xff0c 随
  • 使用ActiveMQ进行C++与C#的通信

    该系列文章介绍如何通过ActiveMQ在C 43 43 和C 控制台项目之间通信 关于ActiveMQ的介绍可以参考 深入浅出ActiveMQ xff0c 平台搭建可以参考 Activemq 平台搭建与C 示列 xff0c 两者之间有交叉内
  • Centos8防火墙设置

    进程与状态相关 systemctl start firewalld service 启动防火墙 systemctl stop firewalld service 停止防火墙 systemctl status firewalld 查看防火墙状
  • c/c++笔试

    1 xff0e 进程和线程的差别 线程是指进程内的一个执行单元 也是进程内的可调度实体 与进程的区别 1 调度 xff1a 线程作为调度和分配的基本单位 xff0c 进程作为拥有资源的基本单位 2 并发性 xff1a 不仅进程之间可以并发执
  • android onNewIntent 调用时机

    当前Activity已经在Activity堆栈当中时 xff0c 主要取决于LaunchMode对应的设置 LaunchMode为SingleTop时 xff0c 如果ActivityA在栈顶 且现在要再启动ActivityA xff0c
  • 不知道怎么开发VR游戏?Unity5.3官方VR教程重磅登场-系列3 VR中的交互方式

    不知道怎么开发VR游戏 xff1f Unity5 3官方VR教程重磅登场 系列3 VR中的交互方式 王寒 4 个月前 https zhuanlan zhihu com p 20505470 概览 xff1a 在VR项目中 xff0c 我们需
  • Java多线程通信-利用传统的线程通信wait(),notify()方法实现“生产者消费者模式”

    想利用传统的线程通信wait notify xff0c notifyAll 方法 xff0c 必须依赖于同步监听器的存在 xff0c 也就是说 xff0c 对于synchronized修饰的同步方法 xff0c 因为该类的默认实例 xff0
  • java TCP/IP实现简单的多人聊天功能

    TCP IP是可靠的网络协议 xff0c 数据的传输需要服务端和客户端之间三次 握手 xff0c 比较适合文本等一些可靠性要求高的数据传输 xff0c 但是它的效率较UDP低 下面通过一张图来简要说明使用 ServerSocket 创建 T
  • JavaScript开发工具WebStorm使用教程:从命令行运行代码检查

    从命令行运行代码检查 WebStorm运行代码检查可以发现并突出显示语法错误 死代码 可能的错误 错误的编码风格和其他问题 还可以从命令行为特定项目运行所有已配置的检查 xff0c 并将结果存储为 XML JSON 或带有报告的纯文本文件
  • 基于Spark的机器学习经验

    这篇内容基于我去年的一些感悟写的 xff0c 但是今年才在Stuq 的微信群做的分享 从技术角度而言 xff0c 对Spark的掌握和使用还是显得很手生的 但是今天一位做数据分析相关的朋友说 xff0c 受这篇内容影响 xff0c 他接受了
  • Linux(manjaro)微信web开发者工具

    安装 wine和winetricks span class hljs built in sudo span pacman S wine winetricks 打开winetricks 安装需要的组件 安装linux版本运行程序 github
  • C++类与对象

    C 43 43 面向对象 一 面向对象程序设计方法概述 1 凡是以类对象为基本构成单位的程序称为基于对象的程序 2 面向对象和面向过程的区别 xff1a 在笔者看来 xff0c 通俗地讲 xff0c 面向对象 就是在描述一个对象 xff0c