python html5 bootstrap 视频教程
德云社区 门户 行业资讯 行业标准 智控标准 查看内容

C++ - C 语言之增强编译型 面向对象的跨平台高级编程语言

2018-6-23 09:56| 发布者: digitser| 查看: 4338| 评论: 0|原作者: Apple

摘要: C++ - C 语言之增强编译型 面向对象的跨平台高级编程语言 C++ 是在 C 语言基础上开发的一种通用编程语言,应用广泛。C++ 支持多种编程范式 ── 面向对象编程、泛型编程和过程化编程。C++ 进一步扩充和完善了 C 语 ...
自动立式分页纸箱赋码系统 ── 全自动 专业 立式分页 瓦楞纸 水性油墨 贴标 喷码 检测系统


类和对象

类是具有相同属性、相同方法的对象集合,类是一种既包含数据又包含函数的抽象数据类型。


对象是类进行实体化后的产物,是一个实体。


C++ 先声明一个类类型,然后再用它去定义若干个同类型的对象。对象就是类类型的一个变量。可以这样说,类是对象模板,是用来定义对象的一种抽象类型。类是抽象的,不占用内存,而对象是具体的,占用存储空间。


01、声明类类型

类是用户自己指定的类型。如程序中要用到类类型,必须根据需要进行声明,或使用别人已设计好的类。C++ 标准本身并不提供现成的类名称、结构、内容。


C++ 声明一个类的类型和声明一个结构体类型是相似的。以下代码为声明一个结构体类型方法:


struct Student // 声明一个名为 Student 的结构体
类型
    {
    int num;
    char name[20];
    char sex;
    };
    Student stud1,stud2; // 定义两个结构体变量 stud1 和 stud2,只包括数据,没有包括操作

以下代码为声明一个类:


class Student // 以 class 开头
   {
   int num;
   char name[20];
   char sex; // 以上 3 行是数据成员
   void display() // 这是成员函数
       {
       cout<<″num:″<<num<<endl;
       cout<<″name:″<<name<<endl;
       cout<<″sex:″<<sex<<endl;
       }; // 以上 4 行是函数中的操作语句
 
   };
   Student stud,stud1; // 定义两个对象 stud 和 stud1

事实上,也可以用 struct 关键字声明一个类。这样的类,所有成员默认权限都是 public (除非特别写上权限);而用 class 声明的类,所有成员的默认权限都是 private。


可以看到声明类的方法,是由声明结构体类型的方法发展而来,类就是对象类型。实际上,类是一种广义的数据类型。类这种数据类型中的数据既包含数据,也包含操作数据的函数。


不能把类中的全部成员与外界隔离,一般是把数据隐蔽起来,而把成员函数作为对外界的接口。可以将上面类的声明改为


class Student // 以 class 开头
    {
   private: // 声明私有成员
   intnum;
   char name[20];
   char sex;
   public: // 声明公共成员
   void display()
       {
       cout<<″num:″<<num<<endl;
       cout<<″name:″<<name<<endl;
       cout<<″sex:″<<sex<<endl;
       }
   };
   Student stud1,stud2;//定义两个对象 stud1 和 stud2

如在类定义中既不指定 private,也不指定 public,则系统就默认为是私有的。归纳以上对类类型的声明,可得到其一般形式如下:

class
类名
   {
   private:
   // 私有的数据和成员函数;
   public:
   // 公用的数据和成员函数;
   };

private 和 public 称为成员访问限定符 (member access specifier)。除 private 和 public 外,还有一种成员访问限定符 protected (受保护的);用 protected 声明的成员称为受保护成员,其不能被类外访问 (这点与私有成员类似),但可被派生类成员函数访问。


在声明类类型时,声明为 private 的成员和声明为 public 的成员的次序任意,既可以先出现 private 部分,也可以先出现 public 部分。


在一个类中,关键字 private 和 public 可以分别出现多次。每个部分的有效范围,是到出现另一个访问限定符或类体结束时 (最后一个右花括号) 为止。为使程序清晰,应养成这样的习惯: 使每一个成员访问类定义体中的限定符只出现一次。


C++ 程序多数先写 public 部分,把 private 部分放在类体的后部。这样可以使用户将注意力集中在能被外界调用的成员上,使阅读者的思路更清晰一些。


在 C++ 程序中,经常可以看到类。为方便起见,常用 C++ 编译系统往往会向用户提供类库 (但不属于 C++ 语言组成部分),内装常用基本类,供用户使用。不少用户也把自己或本单位经常用到的类放在一个专门类库中,需要用到时可直接调用,这样就减少了程序设计的工作量。


02、定义对象

上述程序段中,最后一行用已声明的 Student 类来定义对象,这种方法很容易理解。经过定义后,stud1 和 stud2 就成为了具有 Student 类特征的对象。stud1 和 stud2 这 2 个对象分别包括 Student 类中定义的数据和函数。


定义对象也可使用以下几种方法:


先声明类类型,然后再定义对象

前面用的就是这种方法,如 Student stud1,stud2; // Student 是已经声明的类类型;C++ 声明类类型后,定义对象有两种形式。


1)class 类名 对象名

如: class Student stud1,stud2;


把 class 和 Student 结合起来作为一个类名,用来定义对象。


2)类名 对象名

如: Student stud1,stud2;


直接用类名定义对象。


这两种方法是等效的。第 1 种方法是从  C语言继承下来的,第 2 种方法是 C++ 的特色,显然第 2 种方法更为简捷方便。


在声明类类型的同时定义对象

class Student // 声明类类型
    {
   public: // 先声明公用部分
   void display()
        {
       cout<<″num:″<<num<<endl;
       cout<<″name:″<<name<<endl;
       cout<<″sex:″<<sex<<endl;
       }
   private: // 后声明私有部分
   int num;
   char name[20];
   char sex;
    }stud1,stud2; // 定义 stud1 和 stud2 两个 Student 类对象

在定义 Student 类的同时,定义 stud1 和 stud2 两个 Student 类对象。


不出现类名,直接定义对象

class // 无类名
   {
   private: // 声明以下部分为私有的
   //...
   public: // 声明以下部分为公用的
   //...
   }stud1,stud2; // 定义 stud1 和 stud2 两个无类名的类对象

在 C++ 中直接定义对象是合法的、允许的,但却很少用,也不提倡用。在实际程序开发中,一般采用以上 3 种方法中的第 1 种方法。在小型程序中或所声明的类只用于本程序时,也可采用第 2 种方法。在定义一个对象时,编译系统会为这个对象分配存储空间,以存放对象中的成员。


类和结构体

C++ 增加了 class 类型后,仍保留了结构体类型 (struct ),且把它的功能也扩展了;C++ 允许用 struct 定义一个类型。可将前面用关键字 class 声明的类类型,改为用关键字 struct:


struct Student // 用关键字 struct 来声明一个类类型
    {
   private: // 声明以下部分为私有的
   int num; // 以下 3 行为数据成员
   char name[20];
   char sex;
   public: // 声明以下部分为公用的
   void display() //成员函数
        {
       cout<<″num:″<<num<<endl;
       cout<<″name:″<<name<<endl;
       cout<<″sex:″<<sex<<endl;
       }
   };
   Student stud1,stud2;//定义 stud1 和stud2 两个 Student 类对象

为使结构体类型也具有封装特征,C++ 不是简单地继承 C 语言结构体,而是使其具有类的特点,以便于面向对象程序设计。用 struct 声明的结构体类型实际上也就是类。用 struct 声明的类,如果对其成员不作 private 或 public 的声明,系统将默认为 public。


如果想分别指定私有成员和公用成员,则应使用 private 或 public 作显式声明。


而用 class 定义的类,如果不作 private 或 public 声明,系统将其成员默认为 private,在需要时也可以用显式声明改变。如希望成员是公用的,使用 struct 比较方便,如希望部分成员是私有的,宜用 class。


建议尽量使用 class 来建立类,写出完全体现 C++ 风格的程序。


关键字

关键字 keyword 是 C++ 语言保留的标识符,每个关键字都有特殊含义。经过预处理后,关键字从预处理记号 (preprocessing-token) 中区出来,剩下的标识符作为记号 (token),用于声明对象、函数、类型、命名空间等。不能声明与关键字同名的标识符。


各个版本的 ISO C++ 都规定以下划线接大写字母起始的标识符保留给实现。编译器可用这些保留标识符作为扩展关键字,这不保证可移植性。ISO C++ 98 关键字共63 个,此处严格按标准原文排版:


asm
do
if
return
typedef
auto
double
inline
short
typeid
bool
dynamic_cast
int
signed
typename
break
else
long
sizeof
union
case
enum
mutable
static
unsigned
catch
explicit
namespace
static_cast
using
char
export
new
struct
virtual
class
extern
operator
switch
void
const
false
private
template
volatile
const_cast
float
protected
this
wchar_t
continue
for
public
throw
while
default
friend
register
true

delete
goto
reinterpret_cast
try
 

常见错误
#
英文
参考译文
备注
001
Ambiguous operators need parentheses
模棱两可的操作符需要括号

002
Ambiguous symbol ''xxx''
不明确的符号

003
Argument list syntax error
参数表语法错误

004
Array bounds missing
数组界限符丢失

005
Array size toolarge
数组尺寸太大

006
Bad character in paramenters
参数中有不适当的字符

007
Bad file name format in include directive
包含命令中文件名格式不正确

008
Bad ifdef directive synatax
编译预处理ifdef有语法错

009
Bad undef directive syntax
编译预处理undef有语法错

010
Bit field too large
位字段太长

011
Call of non-function
调用未定义的函数

012
Call to function with no prototype
调用函数时没有函数的说明

013
Cannot modify a const object
不允许修改常量对象

014
Case outside of switch
漏掉了case 语句

015
Case syntax error
Case 语法错误

016
Code has no effect
代码不可能被执行到

017
Compound statement missing{
分程序漏掉"{"

018
Conflicting type modifiers
互相冲突的类型说明符设置

019
Constant expression required
需要常量表达式

020
Constant out of range in comparison
在比较中常量超出范围

021
Conversion may lose significant digits
转换时会丢失数值的精度

022Conversion of near pointer not allowed
不允许转换近指针

023
Could not find file ''xxx''
找不到XXX文件
123

路过

雷人

握手

鲜花

鸡蛋

本文导航

AI人工智能 语音助理 人工翻译 教程

相关阅读

最新评论

CSS3 官方中文文档编制 手册教程 人工翻译 更新日志
CSS3 官方中文文档编制 手册教程 人工翻译 更新日志 CSS3 中文文档编制采用机器辅助 + 全人工翻译,完全采用 数字翻译 的文档翻译流程进行汉化 (未采用任何第 3 方工具),[910/2022-07-31]
CSS3 官方中文文档编制 手册教程 帮助文件 人工翻译
CSS3 官方中文文档编制 手册教程 帮助文件 人工翻译 CSS3 中文文档编制采用机器辅助 + 全人工翻译,完全采用 数字翻译 的文档翻译流程进行汉化 (未采用任何第 3 方工具),[1015/2022-07-31]
SolidWorks 2020 非对称Conic Rho圆角 抽壳出现模型穿刺
SolidWorks 2020 非对称Conic Rho圆角 抽壳出现模型穿刺 标准对称圆角最常用,但有时偶尔也会用到非对称圆角。 特别是模具、五金、电子、手饰、汽车、家具、玩具、等对圆[892/2022-05-25]
NumPy 1.22 官方中文文档编制 手册帮助 更新日志
NumPy 1.22 官方中文文档编制 手册帮助 更新日志 以后不再上传 en-US 官方原版文档编制,目前上传的最新 zh-CN 人工翻译版本为 NumPy 1.22。 NumPy 1.22 中文文档编制采用[582/2022-05-22]
NumPy 1.22 官方中文文档编制 手册帮助 全人工翻译
NumPy 1.22 官方中文文档编制 手册帮助 全人工翻译 以后不再上传 en-US 官方原版文档编制,目前上传的最新 zh-CN 人工翻译版本为 NumPy 1.22。 NumPy 1.22 中文文档编制采[657/2022-05-22]
Pillow 9.1.1 官方中文文档编制 手册帮助 更新日志
Pillow 9.1.1 官方中文文档编制 手册帮助 更新日志 以后不再上传 en-US 官方原版文档编制,目前上传的最新 zh-CN 人工翻译版本为 Pillow 9.1.1。 Pillow 9.1.1 中文文档编[626/2022-05-22]
Pillow 9.1.1 官方中文文档编制 手册帮助 全人工翻译
Pillow 9.1.1 官方中文文档编制 手册帮助 全人工翻译 以后不再上传 en-US 官方原版文档编制,目前上传的最新 zh-CN 人工翻译版本为 Pillow 9.1.1。 Pillow 9.1.1 中文文档[579/2022-05-22]
PyMuPDF 1.19.6 官方中文文档编制 手册帮助 更新日志
PyMuPDF 1.19.6 官方中文文档编制 手册帮助 更新日志 以后不再上传 en-US 官方原版文档编制,目前上传的最新 zh-CN 人工翻译版本为 PyMuPDF 1.19.6。 PyMuPDF 1.19.6 中文[1161/2022-05-22]
PyMuPDF 1.19.6 官方中文文档编制 手册帮助 全人工翻译
PyMuPDF 1.19.6 官方中文文档编制 手册帮助 全人工翻译 以后不再上传 en-US 官方原版文档编制,目前上传的最新 zh-CN 人工翻译版本为 PyMuPDF 1.19.6。 PyMuPDF 1.19.6 中[995/2022-05-22]
Qt 6.3.0 官方中文文档编制 手册教程 帮助文件 人工翻译
Qt 6.3.0 官方中文文档编制 手册教程 帮助文件 人工翻译 以后不再上传 en-US 官方原版文档编制,目前上传的最新 zh-CN 人工翻译版本为 Qt 6.3.0。 Qt 6.3.0 中文文档编制[2445/2022-05-02]
Qt 6.3.0 官方中文文档编制 手册教程 人工翻译更新日志
Qt 6.3.0 官方中文文档编制 手册教程 人工翻译更新日志 以后不再上传 en-US 官方原版文档编制,目前上传的最新 zh-CN 人工翻译版本为 Qt 6.3.0。 Qt 6.3.0 中文文档编制采[2029/2022-05-02]
MAGIX Music Maker Premium - 易学易用 功能强大的可视化编曲软件
MAGIX Music Maker Premium - 易学易用 功能强大的可视化编曲软件 MAGIX Music Maker 是德国 Magix 出品的可视化编曲软件,功能强大、使用简单、容易上手。 MAGIX Music Ma[1738/2022-04-11]
MQTT - 消息队列遥测技术 M2M机器到机器 IoT物联网 通信协议
MQTT - 消息队列遥测技术 M2M机器到机器 IoT物联网 通信协议 MQTT 是 Message Queuing Telemetry Transport 的缩写,中文译为消息队列遥测传输。 MQTT 是 ISO 标准 (ISO/I[616/2022-02-24]
数字 Python IDE 2022 注册机 注册码生成器 附详细破解方法
数字 Python IDE 2022 注册机 注册码生成器 附详细破解方法 数字 Python IDE 目前还在不断研发 进步中,虽不太成熟,但其新理念很有特色 特别适于多版本 多文档 多工程并行[680/2022-02-01]
数字翻译 2022 注册机 注册码生成器 内存破解器 附详细用法
数字翻译 2022 注册机 注册码生成器 内存破解器 附详细用法 数字翻译目前还在不断研发 进步中,虽不太成熟,但其新理念很有特色 特别适于 HTML 文档本地化 (面向高精度 超[634/2022-02-01]

Archiver|Sitemap|小黑屋|德云社区   

GMT+8, 2024-4-26 14:24 , Processed in 0.041438 second(s), 28 queries .