首页 > 编程语言 >C++基础语法---类和对象

C++基础语法---类和对象

时间:2024-10-16 21:21:13浏览次数:3  
标签:语法 string int void C++ --- 对象 include class

目录

1、 概念

1.1 对象:

1.2 类型:

2、 抽象

3、封装

4、对象的产生

5、对象的大小

6、 操作对象

7、数据的保护和共享

8、C++内置字符串操作类

例:分文件形式---时钟类代码实现:

总结:


1、 概念

1.1 对象:

现实世界中一切客观存在的事物,统称为对象。对象是有形的,例如一杯水,一台电脑等。

也可以是无形的,例如一项具体的计划,一段经历。

1.2 类型:

将现实世界中具体的对象进行概括,找出他们的公共性质并加以描述,这样就形成了人们口

中的类型。

  人类认识世界的过程是不断的找出对象的公共性质并加以概括性描述的过程—贴标签。

  人类改造世界的过程就是将概念性的内容具体化成一个一个对象的过程—创建对象。

结构体和类都是抽象的,在真实世界中,他们只可以表示某个群体。无法确定这个群体中的某个独

立个体,而对象则是群体中独立存在的个体。

即:  现实存在的-----对象。

大脑中的想法—概念(类型)。

以上种种都是现实世界中人们熟悉的概念和方法,编写程序的目的是为了解决现实世界中的问

题,因此需要将现实世界的内容反映到计算机世界中,需要让计算机拥有“对象”和“类型”的意识,

C++支持这种实现。

  计算机中的对象-----占据内存的变量。

  计算机中的类型-----用于描述相似变量们的概念。

2、 抽象

   面向对象中的抽象,是对具体问题的概括过程,概括出若干对象的公共性质并加以描述。本质上

是对问题的分析和认识的过程。一般来说,对于具体问题的抽象的过程包括两方面:

  ① 数据抽象  (有什么)

  ② 行为抽象  (能做什么)

举例:

   (1)时钟

   数据抽象: 时针 分针 秒针

             int hour,int minute,int second;

   行为抽象: 设置时间,显示时间

           void setTime(int h,int m,int s);

           void showTime();

  (2)学生

   数据抽象: 学号 姓名 专业 学校

             int id,char name[10],char course[20],char school[100]

   行为抽象:学习,娱乐,运动

         void study(),void entertainment(),void sport();

3、封装

    将抽象得到的数据和操作这些数据的函数进行有机的结合,形成一个整体。即将变量和操作这些

变量的函数代码进行组合,放到一起,形成一个整体,这就是C++中所谓的“类”,其中的数据和操

作数据的函数都是类的成员。

  时钟类:

//时钟类
class Clock
{
	int hour;
	int minute;
	int second;
	void setTime(int h, int m, int s) {
		hour = h;
		minute = m;
		second = s;
	}
	void showTime() {
		cout << hour << ":" << minute << ":" << second << endl;
	}
};

4、对象的产生

类是一个抽象的概念,是对具体问题的概括性描述,因此在计算机中定义了一个类就是告诉计算机

有一个新的类型出现了。真正能够运行的实际上是对象,该对象就会根据用户描述的类来进行产

生,产生对象的这一过程被称为类的“实例化过程”。

语法:

类名 对象名; 

Clock myClk;//实例化

5、对象的大小

和结构体类似,类对象也仅仅计算该类中成员变量的大小,也像结构体一样遵守字节对齐规则。

如果一个类中没有成员变量,则称这个类为空类,一个空类对象的大小占据1字节,原因是对象是

客观存在在内存中的变量,为了识别这个变量,就必须开辟内存,而空类由于没有成员变量,因此

理论上也就没有空间,但是空类的对象是客观存在的,因此编译器为了标记该对象(让对象有访问

地址),所以会为该对象分配一字节大小的内存单元。

#include <iostream>
using namespace std;
//时钟类
class Clock
{
	int hour;
	int minute;
	int second;
	void setTime(int h, int m, int s) {
		hour = h;
		minute = m;
		second = s;
	}
	void showTime() {
		cout << hour << ":" << minute << ":" << second << endl;
	}
};

class Demo
{
	void hahaha(){}
};

int main()
{
	int x;
	Clock myClk;//实例化
	cout << sizeof(myClk) << endl; //12字节

	Demo obj;
	cout << sizeof(obj) << endl; //1字节
	Demo obj1;
    return 0;
}

6、 操作对象

 和结构体类似,操作对象就是操作对象中的成员,语法是:

对象名.成员名

eg:myClk.showTime();

7、数据的保护和共享

在使用对象访问成员时,需要将某些成员进行有效的保护,不允许随意的进行操作,同时将某些成

员进行共享,能够在类的外面被有效的访问。此时就需要对于类中的成员进行权限的设定。因此可

以定义不同的访问权限来使得封装的内容一部分充当类和外界的共享接口,另一部分被很好的保

护。在C++中通过使用public,protected,private关键字来对于类中的成员进行权限的设定。

格式:

class 类名

{

   权限关键字:

        成员

   权限关键字:

        成员

};

public :定义了类的内外交互结构,类内类外皆可访问;

protected :派生类内部可以访问,类的外部不能访问;

private : 类内部可以访问,类外部不能访问;

8、C++内置字符串操作类

#include <string>

string类的使用

①初始化

string str;

string str(“hello”);

string str = “hello”;

常用string类函数:

#include<string> //引入头文件
#include <iostream>
using namespace std;
int main()
{
	//初始化
	string str;
	string str1("hello");
	string str2 = "world";
	cout << str << endl;
	cout << str1 << endl;
	cout << str2 << endl;
	//常用函数
	cout << str1.length() << endl;//计算长度
	cout << str1.size() << endl;//计算长度
	bool ok = str1.empty() ;//判断是否为空
	str1.clear();//清空字符串对象
	cout << str1.length() << endl;

	const char* p = nullptr;
	p = str2.data();//将string类型的数据转换成char*字符串
	cout << p << endl;
	str1 = "hello";
	cout << str1 + str2 << endl;//连接两个string对象
	string str3;
	str3 = str2;
	cout << str3 << endl;

	return 0;
}

例:分文件形式---时钟类代码实现:

头文件:class.h

//类声明
#ifndef _CLASS_H_
#define _CLASS_H_
class Clock
{
private:
	int hour;
	int minute;
	int second;
public:
	void setTime(int h, int m, int s);
	void showTime();
};
#endif

类定义文件:class.cpp

#include <iostream>
#include "class.h"
using namespace std;
//类定义
void Clock::setTime(int h, int m, int s){
		if (h<0 || h>12 || m < 0 || m >= 60 || s < 0 || s >= 60)
		{
			cout << "时间设置出错" << endl;
		}
		else{
			hour = h;
			minute = m;
			second = s;
		}
}

void Clock::showTime(){
		cout << hour << ":" << minute << ":" << second << endl;
}

测试类文件:test.cpp

#include <iostream>
#include "class.h"
using namespace std;
int main()
{
	Clock myClk;
	myClk.setTime(4, 11, 49);
	myClk.showTime();

	return 0;
}

 注:若在类声明外部定义类中的成员函数,  要写上类函数的全名:

void Clock::setTime(int h, int m, int s) 

总结:

类是面向对象设计方法的核心;

面向过程的程序设计的基本模块是由函数组成,解决问题时是以流程来分析,而面向对象程序设计

的基本模块是类,类是对逻辑上相关联的数据和函数的封装。是对问题的抽象描述,实际上类就是

满足描述现实事物而自定义的数据类型。

标签:语法,string,int,void,C++,---,对象,include,class
From: https://blog.csdn.net/m0_60631703/article/details/142942613

相关文章

  • 蓝桥杯4-R格式-2
    3.高精度乘法#include<iostream>//引入输入输出流库#include<cstring>//引入字符串处理库usingnamespacestd;chars1[2005],s2[2005];//用于存储输入的两个大数inta[2005],b[2005],c[2005];//数组用于存储数字和结果intmain(){intla,lb,lc;......
  • 内存管理-31-系统内存统计-6-dumpsys meminfo
     一、dumpsysmeminfo命令数据格式Exynos:/#dumpsysmeminfoApplicationsMemoryUsage(inKilobytes):Uptime:9463100Realtime:9463100TotalPSSbyprocess:452,701K:com.sumsung.speech(pid2297)266,607K:system(pid936)79,088K:vendor.q......
  • 国家人工智能创新应用先导区数据及城市人工智能先导区准自然实验数据(2006-2023年)
    一、测算方式:参考C刊《当代财经》冯婉昕(2024)老师的做法,本文的核心解释变量为国家人工智能创新应用先导区政策(AI)。企业的金融资产配置是企业生产经营的内生变量,因此,如果选择企业层面的指标来度量企业人工智能应用情况,会面临较大的内生性问题,从而无法识别人工智能应用与金融资产......
  • SpringBoot Aop面向切面编程-快速入门-实战案例
    AOP部分笔记来自黑马程序员。一、AOP概述什么是AOP?AOP英文全称:AspectOrientedProgramming(面向切面编程、面向方面编程),其实说白了,面向切面编程就是面向特定方法编程。那什么又是面向方法编程呢,为什么又需要面向方法编程呢?来我们举个例子做一个说明:比如,我们这里有一个......
  • 2024CSP-J模拟赛9————S12678
    一,赛中得分T1100T2100T350T440总分290二,赛中概括  T1T2较快过,T3T4骗了90分(意料之中,这么好骗分!!!)。三,题目解析涂格子(paint)问题描述现在有一个 n 行 m 列的网格纸,一开始每个格子都是白色的。现在你可以任意挑选恰好 x 行和 y 列,将挑......
  • Java算法竞赛之HashMap常用API--哈西表!
    在Java算法竞赛中,HashMap是一个非常重要的数据结构,它提供了许多有用的API来方便地进行键值对的存储、检索和更新。除了getOrDefault方法外,HashMap还有其他一些常用的API。以下是一些主要的HashMapAPI及其在算法竞赛中的常见用法:put(Kkey,Vvalue)作用:将指定的键与值放入H......
  • 嵌入式学习-IO进程-Day03
    嵌入式学习-IO进程-Day03IO进程获取文件属性(stat)库库的概念库的分类静态库的制作动态库的制作进程进程和程序的区别进程的特点进程三段进程的类型进程的运行状态进程状态转换图(重点)进程的函数接口创建进程forkfork函数创建的子进程的特点IO进程获取文件......
  • RabbitMQ系列学习笔记(三)--工作队列模式
    文章目录一、工作队列模式原理二、工作队列模式实战1、抽取工具类2、消费者代码3、生产者代码4、查看运行结果本文参考尚硅谷RabbitMQ教程丨快速掌握MQ消息中间件rabbitmqRabbitMQ详解Centos7环境安装Erlang、RabbitMQ详细过程(配图)一、工作队列模式原理与......
  • 2-STM32F103+ML307(中移4G Cat1)OTA升级篇(自建物联网平台)-STM32通过ML307使用http或
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/ZLIOTB/ML307/myota.html"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p>  说明前面......
  • .NET周刊【10月第2期 2024-10-13】
    国内文章C#/.NET/.NETCore优秀项目和框架2024年9月简报https://www.cnblogs.com/Can-daydayup/p/18457705文章介绍了多个与C#.NET和ASP.NET相关的优秀开源项目和框架,包括AvaloniaUI、WaterCloud、CodeMaid、NetCoreServer等。这些项目各具特色,涵盖UI设计、快速开发、代码简化......