先了解一下什么叫类?
类(Class)是面向对象程序设计实现信息封装的基础。类是一种用户定义类型,也称类类型。每个类包含数据说明和一组操作数据或传递消息的函数。类的实例称为对象。类是面向对象程序设计中的概念,是面向对象编程的基础。类的实质是一种数据类型,类似于int、char等基本类型,不同的是它是一种复杂的数据类型。因为它的本质是类型,而不是数据,所以不存在于内存中,不能被直接操作,只有被实例化为对象时,才会变得可操作。类是对现实生活中一类具有共同特征的事物的抽象。如果一个程序里提供的类型与应用中的概念有直接的对应,这个程序就会更容易理解,也更容易修改。一组经过很好选择的用户定义的类会使程序更简洁。此外,它还能使各种形式的代码分析更容易进行。特别地,它还会使编译器有可能检查对象的非法使用。类的内部封装了方法,用于操作自身的成员。类是对某种对象的定义,具有行为(be-havior),它描述一个对象能够做什么以及做的方法(method),它们是可以对这个对象进行操作的程序和过程。它包含有关对象行为方式的信息,包括它的名称、方法、属性和事件。类的构成包括数据成员和成员函数。数据成员对应类的属性,类的数据成员也是一种数据类型,并不需要分配内存。成员函数则用于操作类的各项属性,是一个类具有的特有的操作,比如“人”可以“上课”,而“水果”则不能。类和外界发生交互的操作称为接口。
定义类:
class类名
{
public: 公有成员
private: 私有成员
protected: 保护成员
};
先了解一下什么叫结构体?
在C#中,结构体是值类型数据结构。它使得一个单一变量可以存储各种数据类型的相关数据。struct 关键字用于创建结构体。结构体是用来代表一个记录。假设您想跟踪图书馆中书的动态。您可能想跟踪每本书的以下属性:
Title
Author
Subject
Book ID
定义结构体:定义一个结构体,您必须使用 struct 语句。struct 语句为程序定义了一个带有多个成员的新的数据类型,格式如下:
struct Books
{
public string title;
public string author;
public string subject;
public int book_id;
};
类和结构体的区别主要有以下几点:
1、 在 Swift 中,类是引用类型,结构体是值类型。值类型在传递和赋值时将进行复制,而引用类型则只会使用引用对象的一个"指向"。所以他们两者之间的区别就是两个类型的区别。
2、 在内存中,引用类型诸如类是在堆上,而值类型诸如结构体实在栈上进行存储和操作。相比于栈上的操作,堆上的操作更加复杂耗时,所以一些官方推荐使用结构体,这样可以提高程序运行的效率。
3、 类可以被继承,而结构体不能被继续;
4、 结构体只能封装属性,而类不仅可以封装属性还可以封装方法;
5、 类的声明和结构的声明非常类似,只是限定符后面是 struct 还是 class 的区别;
6、 结构体与类的类型不一样,可是他们的基类型都是对象(object),c#中所有类型的基类型都是object;
7、 虽然结构体的初始化也使用了New 操作符可是结构对象依然分配在堆栈上而不是堆上,如果不使用“新建”(new),那么在初始化所有字段之前,字段将保持未赋值状态,且对象不可用;
8、 内部结构:
结构体:没有默认的构造函数,但是可以添加构造函数 没有析构函数 没有 abstract 和 sealed(因为不能继承) 不能有protected 修饰符 可以不使用new 初始化在结构中初始化实例字段是错误的;
类: 有默认的构造函数 有析构函数 可以使用 abstract 和 sealed 有protected 修饰符 必须使用new 初始化
最后一点就是该如何选择使用类和结构体?记住这几点
1、 堆栈的空间有限,对于大量的逻辑的对象,创建类要比创建结构好一些;
2、 结构表示如点、矩形和颜色这样的轻量对象,例如,如果声明一个含有 1000 个点对象的数组,则将为引用每个对象分配附加的内存。在此情况下,结构的成本较低。
3、 在表现抽象和多级别的对象层次时,类是最好的选择;
4、 大多数情况下该类型只是一些数据时,结构时最佳的选择;
结构体类型struct 这一章我们来重点讲解一下Go的重要数据类型——结构体类型struct。一个结构体就是一个命名的元素序列,每个元素又叫做字段,每个字段都有一个类型和名字。从面向对象的角度看,结构体类型中的字段代表了该类型的属性,而与这些字段相关的方法,则可以看作针对这些属性的操作。 结构体定义 Go语言的结构体定义和C是非常类似的。以type开始,后面跟着结构体的名字、struct{
在着色器语言GLSL ES前面内容介绍过浮点数float、整形数int、三维向量vec3、4x4矩阵mat4等各种数据类型,关于结构体主要功能就是利用WebGL着色器已经提供的常见数据类型,自定义一个新的数据类型。 WebGL着色器语言中结构体和C语言类似,结构体是由多个同类或不同类的数据类型构成的一个集合。 // 首先定义一个结构体,也就是自定义一个数据类型 struct Directional
Solidity提供struct来定义自定义类型。我们来看看下面的例子: pragma solidity ^0.4.0; contract CrowdFunding{ struct Funder{ address addr; uint amount; } struct Campaign{ address benefi
问题内容: 我注意到,如果不上课之前写的话,它的工作原理就和一样。我不明白为什么会这样?它应该显示一个错误,当我不声明一个类的,或。但这很好。是什么原因? 问题答案: ,并且是访问修饰符。Public表示可以由任何类,由子类保护,由类本身私有的任何类访问主题,没有修饰符表示“受包保护”,因此可以从同一包中的类访问该主题。 主题是类,方法,成员变量。
问题内容: 是什么使类型不同于类,反之亦然? (与一般语言无关) 问题答案: 以下答案来自Gof书(“设计模式”) 对象的类定义了对象的实现方式。该类定义了对象的内部状态及其操作的实现。 相反,对象的 类型仅引用其接口-可以响应的一组请求。 一个对象可以具有许多类型,而不同类的对象可以具有相同的类型。 max函数需要一个类型为operation>且具有其自身类型的类型作为其接口之一,满足上述要求的
概述 结构体是将零个或多个任意类型的变量,组合在一起的聚合数据类型,也可以看做是数据的集合。 声明结构体 //demo_11.go package main import ( "fmt" ) type Person struct { Name string Age int } func main() { var p1 Person p1.Name =