C++类和对象的基本概念

2023-10-27

目录

1.c和c++中struct的区别

2.类的封装

3.类的访问权限


1.c和c++中struct的区别

c语言中结构体中不能存放函数,也就是数据(属性)和行为(方 法)是分离的

c++中结构体中是可以存放函数的,也就是数据(属性)和行为 (方法)是封装在一起的

#define _CRT_SECURE_NO_WARNINGS 
#include <iostream>
using namespace std;
//c语言不能放函数
struct _stu
{
	int a;
	int b[5];
};
//c++中可以放函数
struct _stu1
{
	int a;
	int b[5];
	void print_stu()
	{
		cout << a << endl;
	}
};
struct student
{
    //学生的属性和数据
    int age;
    int id;
	char name[256];
	//操作属性的叫做 方法或行为‐函数
	void print()
	{
		cout << age << id << name << endl;
	}


 };
void test01()
{
	student obj;
	obj.age = 10;
	obj.id = 20;
	strcpy(obj.name, "lucy");
	obj.print();
 }
int main()
{
	test01();
	return 0;
}

2.类的封装

c语言中表示事物时,将属性和行为分离,有可能行为调用出错

比如你先定义一个人的属性和行为

struct Person
{
	int age;
	char name[128];
};
void Person_eat(struct Person *p)
{
	printf("%s 在吃饭\n", p->name);
}

然后定义一个狗的属性

struct Dog
{
	int age;
	char name[128];
};
void Dog_eat(struct Dog* p)
{
	printf("%s 在吃狗粮\n", p->name);
}

而测试的时候可以这样 

 调用了人的属性,在调用狗的行为

void test01()
{
	struct Person p1;
	p1.age = 20;
	strcpy(p1.name, "bob");
	Dog_eat(&p1);
}

c++对事物的封装

因为c++中struct里面可以存放函数,也就是行为,就不会存在上述情况

c++将事物的属性和行为封装在一起

’类和结构体的一个区别在于,类对成员可以进行访问的权限控 制,结构体不可以

类 = 类型 (事物的行为和属性) 类实例化出来的变量叫对象

类中的函数 可以访问类里面的成员

结构体中所有成员默认都是公有的 类中的所有成员默认是私有的,也可以修改成员的访问权限

#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;

//struct 
//类中的所有成员 访问权限都是私有的 private
class Person
{
 public://共有的
     //类中的所有成员 访问权限都是私有的 private
	//属性
	int age;
	char name[128];
	//行为
	void Person_eat()
	{
		printf("%s 吃饭\n", name);
	}

};
struct Dog
{
	//属性
	int age;
	char name[128];
	//行为
	void Dog_eat()
	{
		printf("%s 吃饭\n", name);
	}

};
void test01()
{
	Person p1;
	p1.age = 10;
	strcpy(p1.name, "lucy");
	p1.Person_eat();
}
int main()
{
	test01();
}

3.类的访问权限

#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <string.h>
using namespace std;
class person
{
public:
	int  mTall;  // 多高可以让外人知道
protected:
	int mMoney; // 多少钱,只能让儿孙孩子 子类可以访问
private:
	int mAge; //年龄不想让外人知道

	void show()
	{
		cout << mTall << " ";
		cout << mMoney << " ";
		cout << mAge << " ";
	}
};

void test01()
{
	person p;
	p.mTall = 180;
}
int main()
{
	test01();

	return 0;
}

尽量设置成员变量为私有权限

优点:

对变量的设置时的控制

可以给变量设置只读权限

可以给变量设置只写权限

可以给变量设置可读可写权限

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

C++类和对象的基本概念 的相关文章

  • WinForms:如何确定窗口是否不再活动(没有子窗口具有焦点)?

    我的应用程序使用多个窗口 我想隐藏一个特定窗口 以防应用程序失去焦点 当活动窗口不是应用程序窗口时 source https stackoverflow com questions 466354 how can i tell if a wi
  • ASP.NET MVC 中的经典 ASP (C#)

    我有一个应用程序想要 最终 转换为 ASP NET MVC 我想要进行全面的服务升级 到 ASP NET 但想要使用当前的 ASP 内容来运行当前的功能 这样我就可以在对新框架进行增量升级的同时升级小部分 该站点严重依赖于不太成熟的 VB6
  • 使用具有现有访问令牌的 Google API .NET 客户端

    用例如下 移动应用程序正在通过 Google 对用户进行身份验证 并且在某些时候 我们需要将用户的视频发布到他的 YouTube 帐户 出于实际原因 实际发布应该由后端完成 已经存储在那里的大文件 由于用户已经通过应用程序的身份验证 因此应
  • 向 ExpandoObject 添加方法时,“关键字 'this' 在静态属性、静态方法或静态字段初始值设定项中无效”

    我尝试向 ExpandoObject 添加一个动态方法 该方法将返回属性 动态添加 给它 但它总是给我错误 我在这里做错了什么吗 using System using System Collections Generic using Sys
  • 如何创建可以像 UserControl 一样编辑的 TabPage 子类?

    我想创建一个包含一些控件的 TabPage 子类 并且我想通过设计器来控制这些控件的布局和属性 但是 如果我在设计器中打开子类 我将无法像在 UserControl 上那样定位它们 我不想创建一个带有 UserControl 实例的 Tab
  • 如何在 Android NDK 中创建新的 NativeWindow 而无需 Android 操作系统源代码?

    我想编译一个 Android OpenGL 控制台应用程序 您可以直接从控制台启动 Android x86 运行 或者从 Android x86 GUI 内的 Android 终端应用程序运行 这个帖子 如何在 Android NDK 中创
  • 32 位应用程序的特征最大矩阵大小

    所以 我正在寻找Eigen http eigen tuxfamily org index php title Main Page当我尝试声明大于 10000x10000 的矩阵时 包崩溃 我需要声明一个像这样的矩阵 可靠地大约有 13000
  • C# 中的接口继承

    我试图解决我在编写应用程序时遇到的相当大的 对我来说 问题 请看这个 为了简单起见 我将尝试缩短代码 我有一个名为的根接口IRepository
  • 对齐 GridView 中的行值

    我需要在 asp net 3 5 中右对齐 gridview 列中的值 我怎样才能做到这一点
  • C++ 异步线程同时运行

    我是 C 11 中线程的新手 我有两个线程 我想让它们同时启动 我可以想到两种方法 如下 然而 似乎它们都没有按照我的预期工作 他们在启动另一个线程之前启动一个线程 任何提示将不胜感激 另一个问题是我正在研究线程队列 所以我会有两个消费者和
  • 如何配置 WebService 返回 ArrayList 而不是 Array?

    我有一个在 jax ws 上实现的 java Web 服务 此 Web 服务返回用户的通用列表 它运行得很好 Stateless name AdminToolSessionEJB RemoteBinding jndiBinding Admi
  • ASP MVC:服务应该返回 IQueryable 的吗?

    你怎么认为 你的 DAO 应该返回一个 IQueryable 以便在你的控制器中使用它吗 不 您的控制器根本不应该处理任何复杂的逻辑 保持苗条身材 模型 而不是 DAO 应该将控制器返回给视图所需的所有内容 我认为在控制器类中看到查询 甚至
  • IronPython:没有名为 json 的模块

    我安装了 IronPython 我的 python 文件如下所示 import sys print sys version import json 运行它的代码 var p Python CreateEngine var scope p C
  • C 语言中 =+(等于加)是什么意思?

    我碰到 与标准相反 今天在一些 C 代码中 我不太确定这里发生了什么 我在文档中也找不到它 In ancientC 版本 相当于 它的残余物与最早的恐龙骨头一起被发现 例如 B 引入了广义赋值运算符 使用x y to add y to x
  • Azure 事件中心 - 按顺序接收事件

    我使用下面的代码从 Azure Event Hub 接收事件 https learn microsoft com en us azure event hubs event hubs dotnet framework getstarted s
  • 生产代码中的 LRU 实现

    我有一些 C 代码 需要使用 LRU 技术实现缓存替换 目前我知道两种实现LRU缓存替换的方法 每次访问缓存数据时使用时间戳 最后比较替换时的时间戳 使用缓存项的堆栈 如果最近访问过它们 则将它们移动到顶部 因此最后底部将包含 LRU 候选
  • 为什么我不应该对不是由 malloc() 分配的变量调用 free() ?

    我在某处读到 使用它是灾难性的free删除不是通过调用创建的对象malloc 这是真的 为什么 这是未定义的行为 永远不要尝试它 让我们看看当您尝试时会发生什么free 自动变量 堆管理器必须推断出如何获取内存块的所有权 为此 它要么必须使
  • 将构建日期放入“关于”框中

    我有一个带有 关于 框的 C WinForms 应用程序 我使用以下方法将版本号放入 关于 框中 FileVersionInfo GetVersionInfo Assembly GetExecutingAssembly Location F
  • 运算符“==”不能应用于“int”和“string”类型的操作数

    我正在编写一个程序 我想到了一个数字 然后计算机猜测了它 我一边尝试一边测试它 但我不断收到不应该出现的错误 错误是主题标题 我使用 Int Parse 来转换我的字符串 但我不知道为什么会收到错误 我知道它说 不能与整数一起使用 但我在网
  • 带重定向标准流的 C# + telnet 进程立即退出

    我正在尝试用 C 做一个 脚本化 telnet 项目 有点类似于Tcl期望 http expect nist gov 我需要为其启动 telnet 进程并重定向 和处理 其 stdin stdout 流 问题是 生成的 telnet 进程在

随机推荐

  • 芝诺悖论

    我们先来看一下芝诺悖论的三个经典问题 阿基里斯是古希腊神话中的跑步健将 假设他和乌龟赛跑 他速度为乌龟的10倍 乌龟在前面10米出发 他在后面追 芝诺可以证明 阿基里斯永远不可能追上乌龟 当阿基里斯追到10米时 乌龟已经向前爬了1米 而当他
  • 业务场景——热点数据

    热点数据解决思路 识别热点 1 在代码层面做预热识别 比如给某个接口判断入参是否为热点数据的规则 比如redis过期时间1s 调一次 1但不更新过期时间 若增长量 gt 5则判为热数据 这种方法能更快速的识别热数据 但缺点是业务逻辑复杂 且
  • MySQL实现7天,15天,30天,90天用户留存数量查询

    如何计算用户留存率 新增用户留存率 新增用户中登录用户数 新增用户数 100 一般统计周期为天 新增用户数 在某个时间段 一般为第一整天 新登录应用的用户数 登录用户数 登录应用后至当前时间 至少登录过一次的用户数 第N日留存 指的是新增用
  • 标准BP神经网络以及MATLAB实现

    BP神经网络的结构可分成三部分 输入层 输入数据 隐藏层 处理数据 输出层 输出结果 其过程可以分为正向传播过程和反向传播过程 在正向传播过程中 BP神经网络通过隐层神经元对数据进行处理 从而输出相应结果 在反向传播过程中BP神经网络通过对
  • 第十七节 DRM 图形显示框架

    以往我们在Linux 上为显示设备开发驱动时 通常使用的是FrameBuffer 的驱动框架 在Frame Buffer 驱动框架下 我们能够快速开发出可供简单使用的显示驱动 但是随着芯片显示外设的性能逐渐增强及GPU 的引入 FrameB
  • linux前台,后台命令

    https promotion aliyun com ntms yunparter invite html userCode qqwovx6h top命令按内存和cpu排序 目录 按进程的CPU使用率排序 按进程的内存使用率排序 按进程的C
  • 有关spring security的错误之 AccessDeniedException Access is denied

    AccessDeniedException Access is denied 没有访问权限 解决方法有以下几种 1 form表单对应spring security的配置文件一定一样 spring security的配置文件代替了contro
  • UE4大数据可视化教程(1)——通过osm和shp数据批量生成城市和道路模型

    目录 通过OSM数据生成这个世界上的任意区域模型 配合blender插件生成批量城市和道路模型
  • c++ stl erase_C ++ STL中的set :: erase()函数

    c stl erase C STL set erase 函数 C STL set erase function set erase function is a predefined function it is used to erase
  • Oracle VM VirtualBox 创建和使用 Ubuntu

    一 下载安装 VirtualBox 安装过程此处不做说明 二 新建虚拟机 打开VirtualBox 点击新建图标新建虚拟机 设置名称 文件保存路径和镜像文件 配置用户名和密码 用于账号登录 分配内存和CPU内核数 这边使用默认值 ubunt
  • mysqldump --master-data=2 --single-transaction

    1 mysqldump导出数据主要有两种控制 一种是导出的全过程都加锁 lock all tables 另一种则是不加 前者会在导出开始时执行 FLUSH TABLES WITH READ LOCK 也就是加全局读锁 会阻塞其它写操作 以保
  • Qt5 报错笔记

    使用QSound类 步骤 1 pro文件中加入 QT multimedia 2 窗体 h文件中加入QSound类的指针 QSound sound 私有对象 3 窗体 cpp文件中构造函数进行音乐播放 QString runPath QCor
  • 为什么ping淘宝返回的ip地址无法直接访问

    为什么ping淘宝返回的ip地址无法直接访问 今天在进行子域名查询的时候想要使用淘宝ip结果发现查询出来的淘宝ip居然显示 难受 于是上网上搜索研究发现原因如下 淘宝采用了CDN服务 当用户访问网站时 域名解析到距离用户最近的CDN服务器的
  • CET,UTC,GMT,CST几种常见时间概述与关系

    CET UTC GMT CST几种常见时间概述与关系 作者 菌果果 日期 2011年03月15日 发表评论 6 查看评论 CET 欧洲中部时间 英語 Central European Time CET 是比世界标准时间 UTC 早一个小时的
  • Linux命令:pidof

    pidof命令 查询某个指定服务进程的PID值 每个进程的进程号码 PID 是唯一的 因此可以通过PID来区分不同的进程 执行以下命令查询sudo服务的PID root LAPTOP HJMUH10E home simon pidof su
  • JVM-从熟悉到精通

    JVM 机器语言 一个指令由操作码和操作数组成 方法调用等于一个压栈的过程 栈有 BP寄存器 和 SP寄存器来占用空间 BP gt Base Point 栈基址 栈底 SP gt Stack Point 栈顶 字节序用于规定数据在内存单元如
  • CUDA并行算法系列之FFT快速卷积

    CUDA并行算法系列之FFT快速卷积 卷积定义 在维基百科上 卷积定义为 离散卷积定义为 0 1 2 3 和 0 1 2 的卷积例子如下图所示 Python实现 直接卷积 根据离散卷积的定义 用Python实现 def conv a b N
  • RNN, LSTM, GRU模型结构详解(看这一篇就够了)

    RNN和LSTM讲解超详细的文章 https zhuanlan zhihu com p 32085405 GRU超详解文章 https zhuanlan zhihu com p 32481747
  • jupyter notebook 导出 markdown文件格式

    jupyter notebook 导出 markdown文件格式 原本jupyter notebook 里面自带的可以选择导出为markdown格式 但是下载之后文件总是打不开 只能另寻他法 方法 第一步 安装nbconvert pip i
  • C++类和对象的基本概念

    目录 1 c和c 中struct的区别 2 类的封装 3 类的访问权限 1 c和c 中struct的区别 c语言中结构体中不能存放函数 也就是数据 属性 和行为 方 法 是分离的 c 中结构体中是可以存放函数的 也就是数据 属性 和行为 方