文章目录

  • 一、结构体的使用
  • 二、由结构体到类
  • 三、C++类的定义与使用
    • 1、引入类(class)
    • 2、类的基本用法
    • 3、类的访问权限
    • 4、类的成员函数与接口定义

一、结构体的使用

1、C语言中struct的使用

struct stu1{int a;float b[8];double c;
};

2、C++中带函数的struct

struct stu2{int ids;int age;char name[10];//C++在结构体中可以定义函数 void pri(){cout << "I am " << name << ",age is "  << age << ",id is "  << ids << endl;}
};

3、C++中结构体的赋值与调用

//给C++的结构体赋值
void load()
{stu2 student;  //结构体对象student student.ids = 12345;student.age = 23;strcpy(student.name, "Chung"); //调用C++结构体中的函数 student.pri();
}

二、由结构体到类

1、结构体与类的区别
(1)结构体是值类型,类是引用类型

(2)结构体成员不能在声明时赋值初始值,类可以(实际上,C#类成员初始化代码会被编译器放到构造函数中的最前边部分执行,而C++中根本没有这种方式,只能声明成员)
不能为结构体提供无参构造函数(类中如果提供了自定义构造函数,就不会再提供默认无参构造函数。)

(3)默认可访问性:结构体的成员默认public,类的成员默认private

(4)结构体可以像类一样通过new 构造函数()来创建实例,也可以声明实例之后再赋值。

(5)结构体在自定义构造函数中必须为所有成员赋值。

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

(7)结构体成员不能从继承自其他类或结构体,也不能被其他类或结构体继承(但可以实现接口),然而类可以(注意,所有的值类型都默认从ValueType类继承,ValueType类再从Object类继承。所以结构体对象仍然拥有超类Object的成员)。

(8)结构体之间的比较,可以使用Equals,而不能使用==操作符。且当结构体有成员是引用类型时,成员的比较是用 Object.ReferenceEquals 实现,即该引用类型的成员是否指向相同的引用(可能会让人误解,因为使用者可能只是想比较数值相同)

2、何时使用类何时使用结构体

  • 因为结构体是值类型,自身存储在栈上,主要用于轻量级对象,用来存储简单的数据(此时结构体的成员也大部分是值类型)。
  • 因为类是引用类型,可以抽象、继承等,适合存储重量级对象,拥有复杂逻辑(结构体不能被继承,也不能继承自其他,不能用abstract关键字等)

三、C++类的定义与使用

1、引入类(class)

其实类和结构体是非常相似的,只是比结构体更具体化。在C++里面,结构体能定义函数,类也能,因此C++中的类与结构体几乎的没有区别的,有时候将struct改为class都没有问题。

类是创建对象的模板,一个类可以创建多个对象,每个对象都是类类型的一个变量;创建对象的过程也叫类的实例化。每个对象都是类的一个具体实例(Instance),拥有类的成员变量和成员函数。

简单来说,类就是将事物抽象成属性和行为,并将其封装在一起的一种引用类型。

2、类的基本用法

#include <iostream>  //标准输入输出流
using namespace std;  //声明一段命名空间 ,且必须定义在全局范围内  class Who
{public://属性int id;int age;//行为void Who_do(){cout << age << "岁大的" << id << "正在睡觉。" << endl; }
};  //结尾id分号一定不能忘记 int main()
{//通过类实例化一个对象 Who People;//默认类中的成员都是私有的,因此不能这样访问:People.age;//结构体中所有的成员默认都是公有的,但类中的成员默认是私有的,加了public才是公有的People.age= 23;People.id= 12345;People.Who_do();
}

注意:无论是struct结构体还是class类的定义,都需要在结尾后添加一个分号,代表一条语句的结束。

3、类的访问权限

  • public:共有部分,类内(类中的函数)类外(类的实例化对象)都可以直接访问
  • protected:保护部分,类外(对象)不能访问;类内(类中函数)可以访问 ,在继承中子类可以访问
  • private:私有部分, 类外不能访问,类内可以访问 ,在继承中子类不能访问

注意:量设置成员变量为私有权限private,可以给变量设置只读、只写、可读可写等权限,同时给它们在共有public部分设置对应的接口

4、类的成员函数与接口定义

(1)普通函数处理

#include <iostream>
using namespace std;class Time  //类Time,用来存放函数变量的
{public:int hour;int minute;int sec;
};
void set_time(Time&);  //函数声明
void show_time(Time&);
int main()
{Time t1;  //定义Time类的对象t1 set_time(t1);  //传入对象 ,函数接收对象需要用引用类型show_time(t1);Time t2;set_time(t2);show_time(t2);return 0;
}
void set_time(Time &t)  //设置值函数
{cin >> t.hour;cin >> t.minute;cin >> t.sec;
}
void show_time(Time &t)  //输出值函数
{cout << t.hour << ":" << t.minute << ":" << t.sec << endl;
}

(2)使用成员函数处理

#include <iostream>
using namespace std;class Time
{public:void set_time();  //公共成员函数 void show_time();
private:int hour;int minute;int sec;
};
int main()
{Time t1;  //对象t2 t1.set_time();t1.show_time();Time t2;t2.set_time();t2.show_time();return 0;
}
void Time::set_time()  //在类外定义函数,需要使用::符号
{cin >> hour;cin >> minute;cin >> sec;
}
void Time::show_time()
{cout << hour << ":" << minute << ":" << sec << endl;
}

(3)成员函数的接口定义

#include <iostream>  //标准输入输出流
using namespace std;  //声明一段命名空间 ,且必须定义在全局范围内 class People
{//在共有部分定义相应的接口
public://对只读属性进行只读访问 int getReadOnly(){return readOnly;}//对只写属性进行只写访问void setWriteOnly(int lins){writeOnly= lins;} //对可读可写属性进行可读可写访问  void setReadWrite(int lins){readWrite= lins;        }int getReadWrite(int lins){return readWrite;}
private:int readOnly;int writeOnly;int readWrite;
};int main()
{People chung;  //根据类People实例化对象chungchung.getReadOnly();chung.setWriteOnly(123);chung.getReadOnly();chung.getReadWrite(456);
}

C++面向对象编程之类的使用(从struct到class的进阶)相关推荐

  1. 什么是面向对象编程?终于懂了

    面向对象的编程(Object-Oriented Programming ,OOP),每当看到这个术语,我们就会把它与Java联系起来. 事实上,Java普及了面向对象的编程风格,除了Java之外,还有 ...

  2. [.net 面向对象编程基础] (18) 泛型

    [.net 面向对象编程基础] (18) 泛型 上一节我们说到了两种数据类型数组和集合,数组是指包含同一类型的多个元素,集合是指.net中提供数据存储和检索的专用类. 数组使用前需要先指定大小,并且检 ...

  3. Kotlin极简教程:第7章 面向对象编程

    原文链接:https://github.com/EasyKotlin 在前面的章节中,我们学习了Kotlin的语言基础知识.类型系统.集合类以及泛型相关的知识.在本章节以及下一章中,我们将一起来学习K ...

  4. Go 面向对象编程应用

    #### Go 面向对象编程应用前面学习了很多的基础知识,这一节来实际写一个小案例:涉及到的知识: 1. 数组的基本使用2. 结构体3. 切片 4. 方法5. 循环6. 函数返回值(命名返回值,普通返 ...

  5. C语言面向对象编程(五):单链表实现

    前面我们介绍了如何在 C 语言中引入面向对象语言的一些特性来进行面向对象编程,从本篇开始,我们使用前面提到的技巧,陆续实现几个例子,最后呢,会提供一个基本的 http server 实现(使用 lib ...

  6. C语言面向对象编程(四):面向接口编程

    Java 中有 interface 关键字,C++ 中有抽象类或纯虚类可以与 interface 比拟,C 语言中也可以实现类似的特性. 在面试 Java 程序员时我经常问的一个问题是:接口和抽象类有 ...

  7. C语言面向对象编程(二):继承详解

    在  C 语言面向对象编程(一)里说到继承,这里再详细说一下. C++ 中的继承,从派生类与基类的关系来看(出于对比 C 与 C++,只说公有继承): 派生类内部可以直接使用基类的 public .p ...

  8. 七、Go 语言面向对象编程

    @Author:Runsen 在 Go 语言中没有类(Class)的概念,但这并不意味着 Go 语言不支持面向对象编程,毕竟面向对象只是一种编程思想.对于面向对象编程的支持Go 语言设计得非常简洁而优 ...

  9. 面向对象编程 - 练习题

    C#面向对象编程-练习题 1.C#中的方法重写使用关键字(a). override overload static Inherit 2.以下的C#代码,试图用来定义一个接口: public inter ...

  10. C语言面向对象编程(六):配置文件解析

    在实际项目中,经常会把软件的某些选项写入配置文件. Windows 平台上的 INI 文件格式简单易用,本篇文章利用<C语言面向对象编程(五):单链表实现>中实现的单链表,设计了一个&qu ...

最新文章

  1. (OCR论文)Mask TextSpotter V3机翻
  2. MikroTik RouterOS使用SATA光驱安装时提示:no CD-ROM found press ENTER to reboot
  3. 高校计算机实验管理人员会议,计算机科学学院召开实验室安全与管理工作会议...
  4. 事件标志组的原理与创建
  5. c3074 无法使用带圆括号的_如何选择路面裂缝贴缝带?
  6. 五分钟轻松了解Hbase面向列的存储
  7. 浅析 PHP 中的 Generator
  8. 1.4编程基础之逻辑表达式与条件分支 08 判断一个数能否同时被3和5整除
  9. 路由协议的管理距离值
  10. 【答辩问题】计算机专业本科毕业设计答辩的一般程序2
  11. 冒泡排序和快速排序的区别
  12. ASC2BCD及奇偶校验位
  13. MarkDown + Typora + PicGo 实验报告模板附赠
  14. 软件构造笔记——Java基本数据类型和对象数据类型
  15. 高中数学压轴解答题:函数零点
  16. 《增长黑客》- 读书笔记(一)
  17. Java实现 定义一个名为Rectangle的类表示矩形 求面积周长
  18. 解决树莓派4B 3.5MM耳机接口没有声音的方法
  19. 量子点太阳能电池《一》
  20. 中国版的Google被阉割掉多少?

热门文章

  1. 64位系统目录在那里_教你玩转Linux系统目录结构
  2. python qt gui快速编程_《PYTHON QT GUI快速编程 PYQT编程指南》源码
  3. html5表单注册应用
  4. springboot中配置多数据源mybatisPlus
  5. 小波变换原理_基于电压行波原理故障测距的相关问题
  6. 字符串转换为列表 python_python,_python把字符串转换成列表,python - phpStudy
  7. centos 6.6 mysql5.7_CentOS 6.5/6.6 安装(install)mysql 5.7 最完整版教程-Go语言中文社区...
  8. oracle日志重建,在线重建redo log日志组
  9. c 语言 00字符串 截断,c语言截断字符串
  10. 玩转 SpringBoot 2 之整合 JWT 下篇