cpp_05 C++中的类和结构体

合集下载

c、c++、c# 结构体与类的区别

c、c++、c# 结构体与类的区别

C、C++、C# 结构体与类的区别1. C与C++中结构体的比较C中的结构体和C++中结构体的不同之处:在C中的结构体只能自定义数据类型,结构体中不允许有函数,而C++中的结构体可以加入成员函数。

C++中的结构体和类的异同:一、相同之处:结构体中可以包含函数;也可以定义public、private、protected数据成员;定义了结构体之后,可以用结构体名来创建对象。

但C中的结构体不允许有函数;也就是说在C++当中,结构体中可以有成员变量,可以有成员函数,可以从别的类继承,也可以被别的类继承,可以有虚函数。

二、不同之处:结构体定义中默认情况下的成员是public,而类定义中的默认情况下的成员是private 的。

实际上,C中的结构体只涉及到数据结构,而不涉及到算法,也就是说在C中数据结构和算法是分离的,而到C++中一类或者一个结构体可以包含函数(这个函数在C++我们通常中称为成员函数),C++中的结构体和类体现了数据结构和算法的结合。

例如:struct CHGROUP{unsigned short LOOPNum;unsigned short SPKMICNum;unsigned short MONITORNum;unsigned short TBNum;unsigned short AGENTNum;unsigned short HBNum;unsigned short VOIPNum;private:CH *pLOOP;CH *pSPKMIC;CH *pMONITOR;CH *pTB;CH *pAGENT;CH *pVOIP;CH *pHB;public:CHGROUP(){LOOPNum = SPKMICNum = MONITORNum = TBNum = AGENTNum = HBNum = VOIPNum = 0;pLOOP = pSPKMIC = pMONITOR = pTB = pAGENT = pHB = pVOIP = 0;}virtual ~CHGROUP(){if(LOOPNum) delete[]pLOOP;if(SPKMICNum) delete[]pSPKMIC;if(MONITORNum) delete[]pMONITOR;if(TBNum) delete[]pTB;if(AGENTNum) delete[]pAGENT;if(HBNum) delete[]pHB;if(VOIPNum) delete[]pVOIP;}void init(unsigned int type, unsigned int num){if(num == 0)return;CH *p = new CH[num];if(p==NULL)return;switch(type){case CHTYPE_LOOP:pLOOP = p;LOOPNum = num;break;case CHTYPE_SPKMIC:pSPKMIC = p;SPKMICNum = num;break;case CHTYPE_MONITOR: pMONITOR = p;MONITORNum = num;break;case CHTYPE_TB:pTB = p;TBNum = num;break;case CHTYPE_AGENT:pAGENT = p;AGENTNum = num;break;case CHTYPE_HB:pHB = p;HBNum = num;break;case CHTYPE_VOIP:pVOIP = p;VOIPNum = num;break;default:delete []p;return;}}上边是一个结构体,然后可以定义了struct CHGROUP chs;调用函数来初始化chs.init(CHTYPE_AGENT, num);在C++中只有两点区别:(1)class中默认的成员访问权限是private的,而struct中则是public的。

C中类与类定义及具体使用方法

C中类与类定义及具体使用方法

C中类与类定义及具体使用方法在C语言中,没有像C++那样的类的概念。

然而,我们可以通过一些技巧和约定来模拟类的行为。

在本文中,我将向您介绍如何在C语言中定义和使用类。

首先,让我们来看看如何定义一个类。

1.结构体定义:在C语言中,可以使用结构体来表示一个类的成员变量。

结构体是一种将不同类型的数据组合在一起的数据类型。

可以通过为该结构体添加成员来定义类的属性。

```ctypedef structint member_variable;//添加其他成员变量} MyClass;```在上面的例子中,我们定义了一个名为MyClass的结构体,并给它添加了一个名为member_variable的成员变量。

您可以根据需要添加其他成员变量。

2.方法定义:在C语言中,方法通常是作为函数来实现的。

我们可以为每个类定义一组特定的函数,这些函数将操作类的实例。

```cvoid init(MyClass *object)object->member_variable = 0;//初始化其他成员变量void set_member_variable(MyClass *object, int value)object->member_variable = value;int get_member_variable(MyClass *object)return object->member_variable;```在上述例子中,我们定义了三个函数:init、set_member_variable 和get_member_variable。

init函数用于初始化类的实例,set_member_variable函数用于设置成员变量的值,get_member_variable函数用于获取成员变量的值。

接下来,让我们看看如何使用定义的类。

1.实例化对象:要创建类的实例,我们需要声明一个结构体变量,并使用init函数对其进行初始化。

C++基础class、struct、union详细

C++基础class、struct、union详细

C++基础class、struct、union详细⽬录1、类class2、结构体struct3、共⽤体union1、类class类是⾯向对象中的特性,在c中是没有类的概念。

通常⽤class来表⽰,cpp中有抽象类,但是没有接⼝这种说法,cpp⽀持多继承。

⼀个普通的类:class Fruit{private:public:Fruit();~Fruit();};Fruit::Fruit(){}Fruit::~Fruit(){}构造函数和析构函数:其中Fruit()表⽰构造函数,~Fruit()表⽰析构函数。

构造函数⽤来创建对象,设置初始化参数。

析构函数在对象销毁的时候执⾏。

修饰符:private:表⽰私有成员,外部不可访问,只有⾃⾝类和友元函数可以访问。

public:表⽰公共成员,外部可以访问。

protected:表⽰保护成员,保护成员和私有成员相似,但是⼦类可以访问保护成员。

类中的成员函数:我们在类中创建函数的时候,可以直接初始化,或者在类外部实现:class Fruit{private:int count;public:Fruit();~Fruit();void add(int i);//直接初始化int getCount(){return count;}};Fruit::Fruit(){cout << "create fruit" << endl;}Fruit::~Fruit(){cout <<"fruit deleted"<<endl;}//在类外部实现void Fruit::add(int i){count = count + i;}友元函数:友元函数虽然可以在类中定义,但是它不属于类的成员函数,必须在类外部实现。

它可以访问定义类中的private和protected成员。

友元类:友元类中的所有函数都是该类的友元。

C语言中的结构体与联合体详解

C语言中的结构体与联合体详解

C语言中的结构体与联合体详解C语言是一门广泛应用于系统开发和嵌入式领域的编程语言。

在C 语言中,结构体和联合体是两种常用的复合数据类型。

本文将详细讨论结构体和联合体在C语言中的使用以及它们的区别。

一、结构体 (Struct)结构体是一种自定义的数据类型,允许我们将不同类型的变量组合在一起,形成一个新的数据类型。

它以"struct"关键字开始,后面跟着结构体的名称,然后是一对花括号{ }。

在花括号中,我们可以定义多个不同类型的成员变量,每个成员变量用分号结束。

举个例子,假设我们需要表示一个学生的信息,我们可以定义一个包含学生姓名、年龄和成绩的结构体:```cstruct Student {char name[50];int age;float score;};```在上面的例子中,我们定义了一个名为Student的结构体,它有三个成员变量:name、age和score。

使用结构体时,我们可以通过"结构体名.成员名"的方式来访问成员变量。

例如,要输出学生的姓名,我们可以使用`printf("%s",)`。

二、联合体 (Union)联合体也是一种自定义的数据类型,它允许我们在同一块内存空间中存储不同类型的数据。

与结构体不同的是,联合体中的成员变量共享同一块内存空间,因此只能同时存储其中的一个成员变量。

联合体以"union"关键字开始,后面跟着联合体的名称,然后是一对花括号{ }。

在花括号中,我们可以定义多个不同类型的成员变量,每个成员变量用分号结束。

举个例子,假设我们需要表示一个图形的信息,我们可以定义一个包含圆的半径和矩形的长度和宽度的联合体:```cunion Shape {float radius;struct {float length;float width;} rectangle;};```在上面的例子中,我们定义了一个名为Shape的联合体,它有两个成员变量:radius和rectangle。

c结构体与类的区别

c结构体与类的区别

c结构体与类的区别一、结构体和类非常相似:1.定义方式:public struct Studentstring Name;int Age;}public class Questionint Number;string Content;}2,两者都是container类型,这表示它们可以包含其他数据类型作为成员。

3,两者都拥有成员,包括:构造函数、方法、属性、字段、常量、枚举类型、事件、以及事件处理函数。

4,两者的成员都有其各自的存取范围。

例如,可以将其中一个成员声明为Public,而将另一个成员声明为Private。

5,两者都可以实现接口。

6,两者都可以公开一个默认属性,然而前提是这个属性至少要取得一个自变量。

7,两者都可以声明和触发事件,而且两者都可以声明委托(Delegate)。

二、结构体和类的主要区别1,结构是实值类型(Value Types),而类则是引用类型(Reference Types)。

2,结构使用栈存储(Stack Allocation),而类使用堆存储(Heap Allocation)。

3,所有结构成员默认都是Public,而类的变量和常量数则默认位Private,不过其他类成员默认都是Public。

4,结构成员不能被声明位Protected,而类成员可以。

5,结构变量声明不能指定初始值、使用New关键字货对数组进行初始化,但是类变量声明可以。

6,结构不能声明默认的构造函数,也就是不拥有参数的非共享构造函数,但是类则无此限制。

7,二者都可以拥有共享构造函数,结构的共享构造函数不能带有参数,但是类的共享构造函数则可以带或者不带参数。

8,结构不允许声明析构函数(Destructor),类则无此限制。

9,结构的实例(Instance)声明,不允许对包含的变量进行初始化设定,类则可以在声明类的实例时,同时进行变量初始化。

10,结构是隐式继承自ValueType类,而且不能继承任何其他类型,类则可以继续自ValueType以外的任何类。

c类与结构体的异同

c类与结构体的异同

c类与结构体的异同C语言中的结构体和类是两种重要的数据类型,它们在定义和使用上有许多相似的地方,但也存在一些不同点。

下面从几个方面来探讨一下C类与结构体的异同。

一、定义方式结构体定义的方式与类的定义方式非常接近,都是通过关键字struct和class进行声明定义。

但是结构体定义中没有类中的访问修饰符(public、protected、private),并且结构体的成员变量默认为public类型。

二、成员变量C语言中的结构体和C++中的类都可以包含成员变量,但C++的类有访问限制符(public、protected、private)。

而结构体中写不写关键字public、protected、private都没有影响,结构体的成员变量默认被视为公共成员。

三、成员函数C++中的类具有自定义的成员函数,而C语言中的结构体是不支持成员函数的。

不过C语言中可以使用指向函数的指针来模拟实现成员函数的效果。

四、继承C语言中的结构体不支持继承,而C++中的类支持继承。

在C++中,通过继承可以使得类之间的关系更加清晰和简单,还能够方便地实现代码复用。

五、实例化C++中的类必须实例化成对象之后才能使用,而结构体不需要进行实例化。

在C语言中,可以直接定义一个结构体变量,并且可以直接访问结构体中的成员变量。

而C++中,需要通过定义一个类的对象才能使用类中的成员变量和函数。

六、运算符重载C++中的类支持运算符重载操作,而C语言中的结构体不支持这一操作。

通过运算符重载,可以使类的对象在使用运算符进行操作的时候更加的灵活和方便,提高了代码的可读性和可维护性。

总结:从定义方式、成员变量、成员函数、继承、实例化以及运算符重载等方面来比较C类和结构体之间的异同,不难发现,C语言中的结构体更加的简单和直观,而C++中的类更加的灵活和强大。

对于选择使用哪种数据类型,我们需要根据不同的开发需求和场景来选择。

结构体和类的比较

结构体和类的比较

结构体和类的比较1.目的和用途:结构体(struct)和类(class)的设计和用途略有不同。

结构体主要用于封装一组相关的数据,而类则更加复杂,可以封装数据和行为(即函数)。

结构体通常用于创建简单的数据对象,而类用于创建更复杂的对象,且具有更强的封装性。

2.成员变量和方法:类和结构体都可以包含成员变量和方法,但是类的成员变量和方法可以是公有的(public)、私有的(private)或受保护的(protected),而结构体的成员变量和方法默认是公有的,除非特别指定为私有的。

3.继承:类可以进行继承,这意味着一个新的类可以从一个现有的类派生出来,继承它的属性和行为。

这使得类可以更好地组织和重用代码。

结构体不能直接进行继承。

4.实例化和使用:类可以通过实例化来创建多个对象,每个对象都有自己的状态和行为。

而结构体通常是作为值类型使用,可以直接创建并使用,而不需要实例化。

这意味着结构体可以更高效地使用内存空间。

5.默认构造函数和析构函数:类在创建对象时可以有默认构造函数和析构函数,而结构体则没有默认构造函数和析构函数。

类的构造函数用于初始化对象的状态,析构函数则用于清理对象的资源。

6.指针和引用:类的对象可以使用指针和引用来操作,这使得对象的操作更加灵活。

结构体也可以使用指针和引用来操作,但是通常更多地以值的形式传递和使用。

7.内存布局:结构体的内存布局是连续的,即所有成员变量在内存中的存储位置是按顺序排列的。

类的内存布局是分散的,即成员变量和函数的存储位置是分开的。

8.性能和效率:因为结构体是按值传递的,所以它们更有效地使用内存,并且在一些情况下可以提高程序的性能。

而类通常需要通过指针或引用传递,这会导致一些额外的开销和性能损失。

结构体和类是编程中非常重要和有用的概念,可以根据具体需求来选择使用哪种方式。

如果只需要简单地封装一组相关的数据,并且不需要过于复杂的行为和功能,可以使用结构体。

而如果需要更复杂的数据和逻辑操作,包括继承、多态、封装等特性,就应当选择类来实现。

C语言中的结构体和联合体

C语言中的结构体和联合体

C语言中的结构体和联合体在C语言中,结构体和联合体是两种用来组织数据的重要数据类型。

它们允许我们将不同类型的数据组合在一起,以便于管理和处理。

在本文中,我将详细介绍C语言中的结构体和联合体,包括它们的定义、访问和使用方法。

首先,让我们来看看结构体(struct)的定义和用法。

结构体是一种用户自定义的数据类型,可以包含不同类型的数据成员。

结构体的定义一般如下:```struct 结构体名 {数据类型1 成员名1;数据类型2 成员名2;...};```例如,我们可以定义一个表示学生信息的结构体:```struct Student {char name[20];int age;float score;};```在这个例子中,我们定义了一个名为Student的结构体,它包含了学生的姓名、年龄和成绩三个数据成员。

要使用结构体,我们可以按照以下方式声明结构体变量并对其进行初始化:```struct Student stu1 = {"Alice", 20, 85.5};```我们也可以通过成员访问运算符(.)来访问结构体变量中的成员:```printf("Name: %s\n", );printf("Age: %d\n", stu1.age);printf("Score: %.1f\n", stu1.score);```接下来,让我们来了解一下联合体(union)的定义和用法。

联合体与结构体类似,也是一种用户自定义的数据类型,但不同的是,联合体的成员共享一块内存空间。

因此,联合体的大小等于其最大成员的大小。

联合体的定义一般如下:```union 联合体名 {成员1数据类型成员1名称;成员2数据类型成员2名称;...};```举个例子,我们可以定义一个表示长方形的联合体:```union Rectangle {int width;int height;};```在这个例子中,我们定义了一个名为Rectangle的联合体,它包含了长方形的宽和高两个成员。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

封装
数据 + 函数 + 访问控制 屏蔽变化 设计模式中的依赖倒置原则: (设计模式中的依赖倒置原则: 高层和 底层都要依赖接口(或协议) 底层都要依赖接口(或协议)互相之间不 要有依赖) 要有依赖) 类的作用域, 类的作用域,将成员函数定义在类的声 明外面
类的作用域
一个类的所有成员位于这个类的作用域内, 一个类的所有成员位于这个类的作用域内, 访问它们必须要通过此类或此类的对象 类的作用域是类定义和类成员的定义范围 在类的作用域内,一个类的成员函数对同一 在类的作用域内, 类的数据成员具有无限制的访问权
本章目标
类和结构的区别 类和对象的关系 对象的生命周期 封装
什么是类?
C++封装的基本单元(数据+函数) C++封装的基本单元(数据+函数) 封装的基本单元 面向对象程序设计的基础 类的成员有访问级别的控制 (public、protected、private) 、 、
class Person{ public: void setValue(char *p, int _age, int _weight){ strcpy( this->name, p); age = _age; weight = _weight; } //函数成员 函数成员 void info(){ cout << name << age << weight << endl; } private: char name[16]; //数据成员 数据成员 int age; //数据成员 数据成员 int weight; //数据成员 数据成员 }; //注意:类的定义最后要加 注意: 注意 类的定义最后要加”;” int main(int argc, char *argv[]){ Person man; man.setValue(“Pitter”, 23, 70); (); return 0; }
嵌套类
int main() { Init::app obj1; obj1.set_app_val(12); cout << obj1.get_app_val() << endl; return 0; }
阶段总结:
成员变量 成员函数 访问控制
阶段练习:
对象和类的联系和区别? 类中访问控制关键字有哪几个, 分别有什么意 义? 封装的优点是?
成员函数
声明和定义 如何调用? 对象、引用、指针) 如何调用?(对象、引用、指针) 成员函数重载. 成员函数重载. 在类定义的内部, 在类定义的内部,成员函数可以访问任何 其它成员函数和成员变量. 其它成员函数和成员变量. 隐含this this指针 隐含this指针
访问控制
public
——可以在外部通过对象或指针、引用访问 可以在外部通过对象或指针、 可以在外部通过对象或指针
C++中结构体和类 C++中结构体和类
C++中类与结构的唯一区别: C++中类与结构的唯一区别: 中类与结构的唯一区别
类(class)定义中默认情况下的成员访 (class)定义中默认情况下的成员访 问级别是private private。 问级别是private。
结构(struct)定义中默认情况下的成员 结构(struct)定义中默认情况下的成员 (struct) 访问级别是public public。 访问级别是publi体 可以在类的内部定义另一个类或结构体 ::” 通过外层类名的作用域操作符 “:: 引 :: 用内部类(后面STL STL的迭代器会遇到这种 用内部类(后面STL的迭代器会遇到这种 情况) 情况) 可以将外层类理解为一个命名空间 嵌套类也收访问级别限制
#include <iostream> using namespace std; class Init { public: class app{ public: void set_app_val(int x); int get_app_val(); private: int app_val; }; private: int Init_val; }; void Init::app::set_app_val(int x){ app_val = x; } int Init::app::get_app_val(){ return app_val; }
struct STime{ int hour; int min; int sec; }; class CTime{ int hour; int min; int sec; }; int main(int argc, char * argv[]){ STime stm; CTime ctm; stm.hour = 12; //OK 默认 默认public stm.min = 13; //OK 默认 默认public stm.sec = 14; //OK 默认 默认public ctm.hour = 12; //ERROR 默认 默认private ctm.min = 13; //ERROR 默认 默认private ctm.sec = 14; //ERROR 默认 默认private return 0;}
Private
——不可以在外部通过对象或指针、引用访问 不可以在外部通过对象或指针、 不可以在外部通过对象或指针
Protected
——不可以在外部通过对象或指针、引用访问 不可以在外部通过对象或指针、 不可以在外部通过对象或指针
类和对象
类是对象结构的说明, 而类的变量,就是对象。 类是对象结构的说明, 而类的变量,就是对象。 class A{…}; A obj; 此处定义了A类的一个对象,对象名为obj, 此处定义了A类的一个对象,对象名为obj,是在栈 obj 中分配的内存。 中分配的内存。 对于类的数据成员,类的每个对象都有一份独立的 对于类的数据成员, 拷贝;而对于类的函数成员, 拷贝;而对于类的函数成员,所有变量都共享一份 成员函数的代码。 成员函数的代码。
相关文档
最新文档