详解C++之类和对象(1)

目录
  • C语言和C++的一大区别
  • struct和class的区别
  • 总结

c++类的由来(或者说为什么要增加类):我们知道c语言是面向过程的语言,c++是即面向过程又是面向过程的语言。那么这两个有着什么样的区别和联系呢?

C语言和C++的一大区别

接下来我们利用c语言的struct来说明:

C 语言中,结构体中只能定义变量。 在 C++ 中,结构体内不仅可以定义变量,也可以定义函数。 例如:如果我们用C语言实现一下的功能,那么我们会发现,在struct内我们只能去定义一些变量 的类型,而我们需要的函数反而要去单独去实现

typedef struct Student
{
	char _name[20];
	int _age;
	char _sex[10];
}student;
  void SetStudentInfo(const char* name, const char* sex, int age)
 {
strcpy(_name, name);
strcpy(_sex, gender);
_age = age;
 }
  void print(student *s)
{
	printf("%c:%age-%c", s->_name, s->_age, s->_sex);
 }
 

在c++内实现的话是:

// 这里是为了和c语言做出区别所以将函数的定义也直接放到结构体内作为内联函数,
如果函数的定义代码很多或者需要调用的次数多建议此处就只进行声明,之后在单独进行定义
struct Student
{
 void SetStudentInfo(const char* name, const char* sex, int age)
 {
strcpy(_name, name);
strcpy(_sex, gender);
_age = age;
 }
 void print(student *s)
{
	printf("%c:%age-%c", s->_name, s->_age, s->_sex);//此处为了区别和c语言struct的不同点利用了c语言的输出方法
 }
 	char _name[20];
	int _age;
	char _sex[10];
};
     

从上述例子我们可以看出在c++中struct可以包含函数的定义和变量,反观在c语言内struct就只能包含变量。

struct和class的区别

在c++中我们引入一个关键词class来指定指定这种既可以包含变量又可以包含函数声明的类型即为c++的类。struct在c++中也是类但是和class修饰还是有一些区别。我们用上述代码来说明这个区别:

这是struct修饰的类

struct Student
{
 void SetStudentInfo(const char* name, const char* sex, int age);
 void print(student *s)
 	char _name[20];
	int _age;
	char _sex[10];
}

这是class修饰的类

struct Student
{
public:
void SetStudentInfo(const char* name, const char* sex, int age);
 void print(student *s)
private:
 	char _name[20];
	int _age;
	char _sex[10];
}

在类中我们保护我们我们的数据,我们引入三种修饰:publicprivateprotected,这三个关键词代表着不同的权限。

而struct默认的是成员函数和成员变量都是public,而class修饰的话成员函数和成员变量都是必须给予修饰的,一般我们是将成员函数用public修饰而成员变量我们用private修饰。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • C++类和对象补充

    目录 一. 再看构造函数 1.函数体内赋初值 2.初始化列表 几点注意 3.explicit关键字 二.static成员 1.概念 2.特性 三.友元 1.友元函数 2.友元类 四.内部类 总结 一. 再看构造函数 我们之前已经了解了构造函数的基本内容,那么这里我们将深入认识构造函数. 1.函数体内赋初值 class Date { public: Date(int year, int month, int day) { _year = year; _month = month; _day = d

  • C++进一步认识类与对象

    目录 赋值操作符重载函数 1.运算符重载 2.赋值运算符重载 3.默认的赋值操作符重载函数 4.赋值重载函数与拷贝构造函数的对比 日期类的实现 const成员 1.const修饰类的成员函数 2.小结 取地址及const取地址操作符重载函数 总结 赋值操作符重载函数 1.运算符重载 C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似. 其函数名为: operator + 需要重载的运算符符

  • C++入门浅谈之类和对象

    目录 一.面向过程vs面向对象 二.类的限定符及封装 三.类的实例化 四.this指针 五.默认成员函数 1. 构造函数 2. 析构函数 3. 拷贝函数 4. 赋值运算符重载 总结 一.面向过程vs面向对象 C语言面向过程,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题 C++是基于面向对象,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成,C++不是纯面向对象的语言,C++既有面向过程,也有面向对象可以混合编程.C语言面向过程,数据和方法是分离的.CPP面向对象,数

  • C++初识类和对象

    目录 一.初步认识面向过程和面向对象 二.类的引入 三.类的定义 1.定义和声明全部放在类体中,需要注意的是: 2.声明与定义分离 四.类的访问限定符及封装 1.访问限定符 2.封装 五.类的作用域 六.类的实例化 七.类对象模型 1.计算类对象的大小 2.类对象的存储方式 八.this指针 1.this指针的引出 2.this指针的特性 总结 一.初步认识面向过程和面向对象 面向过程,关注的是怎么去做,比如在外卖系统中,强调点餐,做餐,送餐等一系列动作的方法,反映到语言中是函数方法的实现:而面

  • 详解C++之类和对象

    目录 一.构造函数 1.构造函数的定义: 2.构造函数的特征: 3.构造函数的实现: 3.1.系统默认的构造函数 3.2无参构造 3.3 带参构造 二 析构函数 1.析构函数的定义 2.析构函数的特征 三 拷贝函数 1.拷贝函数定义 2.拷贝函数的特性 3.拷贝函数的实现 总结 一.构造函数 1.构造函数的定义: 构造函数 是一个 特殊的成员函数,名字与类名相同 , 创建类类型对象时由编译器自动调用 ,保证每个数据成员都有 一个合适的初始值,并且 在对象的生命周期内只调用一次 . 其实构造函数的

  • C++ 再识类和对象

    目录 类的6个默认成员函数 构造函数 1.概念 2.特性 隐式构造函数 无参和全缺省的函数均为默认构造函数 成员变量的命名风格 补充 析构函数 1.概念 2.特性 c++编译器在对象生命周期结束时自动调用析构函数 拷贝构造函数 1.概念 2.特性 若未显式定义,系统会生成默认的拷贝构造函数 浅拷贝的注意事项 总结 类的6个默认成员函数 一个类中如果什么成员都没有,那么这个类称为空类.空类中是什么都没有吗?其实不然,任何一个类,再我们不写的情况下,都会自动生成下面6个默认成员函数: 本篇文章将对这

  • 详解 Python 与文件对象共事的实例

    详解 Python 与文件对象共事的实例 Python 有一个内置函数,open,用来打开在磁盘上的文件.open 返回一个文件对象,它拥有一些方法和属性,可以得到被打开文件的信息,以及对被打开文件进行操作. >>> f = open("/music/_singles/kairo.mp3", "rb") (1) >>> f (2) <open file '/music/_singles/kairo.mp3', mode 'r

  • 详解 C# 中XML对象的序列化和反序列化

    这一篇主要是用来介绍关于C#中的XML序列化的问题,这个相信大家一定会经常使用它,特别是在WPF中,有时候我们需要将我们后台的数据保存在数据库中,从而在软件下一次启动的时候能够自动去加载这些数据,由于我们的这些Model中字段众多,如果单独进行保存那是不太现实的,这个时候将这些字段序列化成xml字符串并保存在数据库中就是一个不错的选择,当我们需要这些数据的时候我们也可以反过来将其序列化为一些字段,最终达到我们的效果,首先我们来看看是如何实现的? public class XMLUtil {   

  • 详解WPF中的对象资源

    在WPF中,所有继承自FrameworkElement的元素都包含一个Resources属性,这个属性就是我们这篇要讲的资源. 这一篇讲解的资源是不是上一篇的程序集资源(那个是在编译过程中打包到程序集中),这个是资源是我们想在公共的地方写一个对象让其他元素重复使用. 先贴个例子: <Window x:Class="NETResource.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/pre

  • 详解JS中的对象字面量

    前言 在 ES6 之前,js中的对象字面量(也称为对象初始化器)是非常基础的.可以定义两种类型的属性: 键值对{name1: value1} 获取器{ get name(){..} }和 设置器{ set name(val){..}}的计算属性值 var myObject = { myString: 'value 1', get myNumber() { return this._myNumber; }, set myNumber(value) { this._myNumber = Number

  • 浅析Java虚拟机详解之概述、对象生存法则

    Java与C++之间有一堵由内存分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来. 一.概述 Java堆和方法区这两个区域有着很显著的不确定性: 1.一个接口的多个实现类需要的内存可能会不一样,一个方法所执行的不同条件分支所需要的内存也可能不一样 2.只有处于运行期间,我们才能知道程序究竟会创建哪些对象,创建多少个对象,这部分内存的分配和回收是动态的 垃圾收集器所关注的正是这部分的内存该如何管理 二.对象已死? 1.引用计数法 在对象中添加一个引用计数器,每当有一个地方引用它

  • 详解JVM系列之对象的锁状态和同步

    java对象头 Java的锁状态其实可以分为三种,分别是偏向锁,轻量级锁和重量级锁. 在Java HotSpot VM中,每个对象前面都有一个class指针和一个Mark Word. Mark Word存储了哈希值以及分代年龄和标记位等,通过这些值的变化,JVM可以实现对java对象的不同程度的锁定. 还记得我们之前分享java对象的那张图吗? javaObject对象的对象头大小根据你使用的是32位还是64位的虚拟机的不同,稍有变化.这里我们使用的是64位的虚拟机为例. Object的对象头,

  • 详解Python类和对象内容

    目录 一.什么是Python类? 二.Python类中的方法和属性 2.1.Python类中的方法 2.2.Python类中的属性 三.面向对象的概念 3.1.Python类:继承 3.2.Python类:多态性 3.3.Python类:抽象 一.什么是Python类? python中的类是创建特定对象的蓝图.它使您可以以特定方式构建软件.问题来了,怎么办?类允许我们以一种易于重用的方式对我们的数据和函数进行逻辑分组,并在需要时进行构建.考虑下图. 在第一张图片(A)中,它代表了一个可以被视为C

  • 详解JavaScript中Arguments对象用途

    目录 前言 Arguments 的基本概念 Arguments 的作用 获取实参和形参的个数 修改实参值 改变实参的个数 检测参数合法性 函数的参数个数不确定时,用于访问调用函数的实参值 遍历或访问实参的值 总结 在实际开发中,Arguments 对象非常有用.灵活使用 Arguments 对象,可以提升使用函数的灵活性,增强函数在抽象编程中的适应能力和纠错能力. JavaScript 中 Arguments 对象的用途总结. 前言 相信我们很多人在代码开发的过程中都使用到过一个特殊的对象 --

  • 详解Java内部类与对象的打印概念和流程

    目录 一.内部类的概念 二.内部类的分类 三.成员内部类 1.普通内部类 2.静态内部类 四.局部内部类 五.对象的打印 一.内部类的概念 在 Java 中,可以将一个类定义在另一个类或者一个方法的内部,前者称为内部类,后者称为外部类.内部类也是封装的一种体现. public class OutClass {//外部类 class InnerClass{//内部类 } } 注意事项: 1.内部类一定是定义在class 类名{}之中的类,定义在class 类名{}之外的,哪怕是在一份文件中,也并不

  • 详解Pandas中GroupBy对象的使用

    目录 使用 Groupby 三个步骤 将原始对象拆分为组 按组应用函数 Aggregation Transformation Filtration 整合结果 总结 今天,我们将探讨如何在 Python 的 Pandas 库中创建 GroupBy 对象以及该对象的工作原理.我们将详细了解分组过程的每个步骤,可以将哪些方法应用于 GroupBy 对象上,以及我们可以从中提取哪些有用信息 不要再观望了,一起学起来吧 使用 Groupby 三个步骤 首先我们要知道,任何 groupby 过程都涉及以下

随机推荐