IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> Linux&C++ 语法知识 -> 正文阅读

[C++知识库]Linux&C++ 语法知识

一、C++与C区别

面向对象编程在程序执行的效率上没有任何优势,它的主要目的是方便程序员组织和管理代码,快速梳理编程思路。

C++ 是在C语言的基础上增加新特性,从语法上看,C语言是 C++ 的一部分,C语言代码几乎不用修改就能够以 C++ 的方式编译。

1. C++程序的命名规则

C++头文件一般采用.h后缀,也用有.hpp的。

C++程序文件一般采用.cpp后缀,也有用.cc的,建议采用.cpp,C++对程序文件的命名没有强制要求,采用.cpp为后缀是大部分程序员的习惯。

2. C++程序的编译
在某些操作系统中,C和C++是同一个编译器,在CentOS中,C的编译器是gcc,C++的编译器是g++。

3. C++是面向对象语言
C语言是面向过程的编程语言,C++是面向对象的编程语言,很多人认为面向对象会比面向过程的方法更先进。仁者和智者的说法各有不同,要慢慢体会,不能人云亦云。

C++的对象,确实可以大幅的提升了C程序员的开发效率,降低程序员犯错的机会。

4. C++输入和输出

大佬曰:在C语言中,我们使用scanf和printf来对数据进行输入输出操作。在C++语言中,增加了cin和cout输入输出,但是我从来不用它,因为它不实用,对格式化的支持实在是太麻烦。
printf实在太完美,太强大。

5. C++异常
大佬曰:C++增加了异常机制,但是,它从诞生开始就一直有争议。
我没有发现C++的异常有什么实用价值,也从来没有用过它。

6. C++命名空间和模板
大佬曰:了解一下命名空间和模板的概念和用法是可以的,会使用就行,但我不建议自定义命名空间和模板,没必要把程序搞得那么麻烦。

7. C++布尔类型(bool)
C语言并没有彻底从语法上支持“真”和“假”,只是用 0 和非 0 来代表。这点在 C++中得到了改善,C++ 新增了 bool 类型(布尔类型),它占用 1 个字节长度。bool 类型只有两个取值,true 和 false:true 表示“真”,false 表示“假”。

8. C++定义变量的位置

ANSI C 规定,所有局部变量都必须定义在函数开头,在定义变量之前不能有其他的执行语句。
C99标准取消这这条限制,但是某些编译器对C99的支持很不积极,仍然要求变量定义在函数开头,或者只支持一部分。

取消限制带来的另外一个好处是,可以在 for 循环的控制语句中定义变量。

  int total=0;
 
  for(int ii=1; ii<=100 ;ii++)
  {
    total = total + ii;
  }

9. C++函数的缺省参数

在C语言中,函数在声明的时候指定了参数列表,调用的时候函数参数的个数、顺序和数据类型必须与函数声明参数列表相同,
但是在C++中,声明函数的时候,可以为函数指定缺省参数,调用时缺省参数可以不填写。
例如:

int writetofile(FILE *fp,char *strbuf,bool enbuffer=true); // 指定参数enbuffer的缺省值为true
enbuffer参数表示是否启用缓冲区,writetofile函数被调用的时候,
如果只写fp和strbuf参数,不写enbuffer参数,enbuffer参数将缺省为true,
例如:
writetofile(fp,strbuf);  // 调用函数的时候,如果第三个参数enbuffer不填,就用缺省值true

10. C++动态内存管理

在C语言中,动态管理内存用 malloc() 函数,释放内存用 free() 函数
在C++中,这两个函数仍然可以使用,但是C++又新增了两个关键字,new 和 delete,new 用来动态分配内存,delete 用来释放内存。
和C语言的动态内存管理一样,C++动态内存管理的应用场景不多。

二、函数重载

C++允许多个函数拥有相同的名字,只要它们的参数列表不同就可以,这就是函数的重载(Function Overloading),借助重载,多个功能相近的一系列函数可以使用同一函数名。

函数的参数列表包括参数的类型、参数的个数和参数的顺序,只要有一个不同就叫做参数列表不同。
注意:
函数的返回值不同能否作为函数重载的依据;
函数的参数名不同能否作为函数重载的依据。

三、类和对象

1. 初识

C语言的结构体不允许有函数,定义结构体变量的方法是:

  struct 结构体名 结构体变量名;

在C++中,结构体的成员可以有函数,定义结构体变量可以用:

结构体名 结构体变量名;
struct关键字可以不书写。

class是C++的关键字,用于定义类,就像结构体中的sturct。

类的成员变量和结构体成员变量一样,也有数据类型和名称。

在C++中,用类定义一个类的变量叫做创建(或实例化)一个对象,成员变量称为类的属性(property),成员函数称为类的方法(method)。

类的成员变量和成员函数的作用域和生命周期与对象的作用域和生命周期相同。

2. 对象数组
类可以创建数组对象,就像结构体数组一样。
简单示例:

class CGirl    // 定义超女类
{
public:
  char m_name[50];  // 姓名
  int  m_age;       // 年龄
  int  m_height;    // 身高,单位:厘米cm
  char m_sc[30];    // 身材,火辣;普通;飞机场。
  char m_yz[30];    // 颜值,漂亮;一般;歪瓜裂枣。
  int  Show();      // 申明显示超女基本信息的成员函数
};
{
  CGirl Girl[10];    // 定义10个超女类数组
  strcpy(Girl[0].m_name,"杨玉环");
  Girl[0].m_age=18;
  ......
  strcpy(Girl[9].m_name,"陈圆圆");
  Girl[9].m_age=21;
}

对象数组作为参数示例:

#include <stdio.h>
#include <string.h>

class CGirl
{
public:
    char m_name[50];
    int m_age;
    int m_height;
    char m_sc[30];
    char m_yz[30];
    int Show();
};

void testclass(CGirl* GirlArr)
{
    printf("-----对象数组as parameter----\n");
    //CGirl GirlArr[10];//定义对象数组,就是生成10个对象
//  GirlArr->m_age=165;//0
//  (GirlArr+sizeof(CGirl)*1)->m_age=166;//2
//  (GirlArr+sizeof(CGirl)*3)->m_age=167;//4
//  (GirlArr+sizeof(CGirl)*5)->m_age=168;//6
//  printf("0.age=%d 2.age=%d 3.age=%d 4.age=%d 6.age=%d \n",\
//          GirlArr->m_age,(GirlArr+sizeof(CGirl)*1)->m_age,(GirlArr+sizeof(CGirl)*2)->m_age,(GirlArr+sizeof(CGirl)*3)->m_age,(GirlArr+sizeof(CGirl)*5)->m_age);
    

    GirlArr[0].m_age=165;//0
    (GirlArr[2]).m_age=166;//2
    (GirlArr[4]).m_age=167;//4
    (GirlArr[6]).m_age=168;//6
    printf("0.age=%d 2.age=%d 3.age=%d 4.age=%d 6.age=%d \n",\
            GirlArr[0].m_age,(GirlArr[2]).m_age,(GirlArr[3]).m_age,(GirlArr[4]).m_age,(GirlArr[6]).m_age);


}

int main()
{
    CGirl GirlArr[10];//定义对象数组,就是生成10个对象
    testclass(GirlArr);
}

3. 对象的指针

类是一种自定义的数据类型,对象是内存变量,有内存地址,当然也就有类的指针,就像结构体的指针一样。如下:

  CGirl queen;
  CGirl *pst=&queen;
通过类指针可以访问对象的成员,书写方法与结构体相同。

   (*pointer).memberName
或者:

  pointer->memberName

示例:

#include <stdio.h>
#include <string.h>
void testclasspointer()
{   
    CGirl * cg;
    CGirl cg1;
    cg=&cg1;

    cg->m_age=18;
    printf("classpointer:%d\n",cg->m_age);
}
int main()
{
    testclasspointer();
}

4. 对象作为函数的参数
与结构体一样,对象可以作为参数传递给函数,最好的方法当然是传递对象的地址
示例:

void testclassparameter(CGirl cg)
{
    cg.m_age=19;
    printf("classparameter:%d\n",cg.m_age);
}

void testclassparameter(CGirl * cg)
{
        cg->m_age=20;
        printf("classparameter:%d\n",cg->m_age);
}

int main()
{
    CGirl cg;
    testclassparameter(cg);
    testclassparameter(&cg);//这种方法最好
}

5. 对象的初始化和占用内存的大小
对象不能用memset初始化,对象可以用sizeof运算符获取占用内存的大小,但是,在实际开发中,程序员不太关心对象占用内存的大小。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-27 12:39:41  更:2021-10-27 12:41:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:51:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码