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++知识库 -> 第一章 从C到C++ -> 正文阅读

[C++知识库]第一章 从C到C++

? ? ? ? 读前须知:本文主要针对有过一定C语言基础的同学,默认大家已经熟悉C语言的基础语法,指针,结构体等特性,在此基础上学习C++;因此将关注C++的新特性,较为基础的知识将不再赘述。

1、C++对C的增强

? ? ? ? 针对大规模软件开发问题,C++编程语言被开发出来。C++兼容C,并在以下两方面对C语言进行扩充

  1. 在面向过程机制基础上,对C语言进行功能扩展;
  2. 增加了面向对象的机制。

2、最简单的C++程序结构

? ? ? ? 在C语言中可以通过函数,主函数,结构体的方式编写程序;在C++中仍然适用;大部分语法完全一致;对于作用域标识符{}的限制不再要求严格,但在一些条件控制,嵌套循环中还是需要严格使用{}标识作用域;下面来看一个最简单的C++程序,它包含了一些常见的操作。

#include <iostream>//<>包含系统库,""包含自定义库
#define pi 3.145159//宏 c语言中实现
const float PI = 3.1415926515;//c艹中使用const定义常变量
//使用const分配了内存空间 define则不会
using namespace std;//命名空间cin cout 定义在这个库内
//或者 std:: cout
int main()
{	
	int a = 1;
	float b = 2;
	cout << a;//C++中的输出
	cout << b;
	cout << a << b;
	int x,y;
	cin >> x >> y;//C++中的输入
	
	cout << x << y << endl;//endl:换行
    return 0;
}

? 以此段程序为例说明一些基础知识。

2.1程序注释

? ? ? ??

//注释,给人看的,C++中这样注释
//"//"后跟注释即可
//当然,C++兼容C,也可使用C风格的/*qwqwq*/来注释,但谁不想省事呢

?2.2预处理命令

? ? ? ? 以之前的程序为例

#include <iostream>//<>包含系统库,""包含自定义库
#define pi 3.145159//宏 c语言中实现

? ? ? ? 以#开头的指令,在预编译阶段执行,做代码文本替换工作,包括 库包含 和 宏定义

2.2.1库包含

#include <iostream>//<>包含系统库,""包含自定义库

? ? ? ? #include 也可以将另一个.cpp文件导入,在编译时直接把那个.cpp文件粘贴到这个位置上。通常把类定义、成员函数的编写、主函数分成三个文件写,就是通过这种方式。(有种import的感觉但又不完全是)?

2.2.2宏定义

#define 标识符 替换文本

2.3命名空间

? ? ? ? 注意到这句话

using namespace std;

? ? ? ? 命名空间的设计是为了解决可能的不同源文件重名,变成可执行文件时出错的问题

? ? ? ? 这里的std就是C++中所有标准库的命名空间。std中也包含者之后会提到的输入与输出cin、cout,因此在使用这两个函数时也需要加上命名空间:

std::cin>>q;
std::cout<<q;

? ? ? ? 但这样写会很麻烦,在整个程序中频繁的使用会增大无聊的coding,因此可以用using namespace std;来说明使用了std这个命名空间,之后直接使用cin、cout即可。

2.4输入和输出

? ? ? ? 在C中我们使用printf(),scanf()等函数进行输入输出,由于要记住一大堆的格式化字符串来输出,让人很头大;C++中为我们提供了更加简单的手段,那就是cin 和 cout

int main()
{	
	int a = 1;
	float b = 2;
	cout << a;//C++中的输出
	cout << b;
	cout << a << b;
	int x,y;
	cin >> x >> y;//C++中的输入
	
	cout << x << y << endl;//endl:换行
    cout << "hello world";
    return 0;
}

? ? ? ? 可以看到,无论什么类型的数据,只需 cout<<data 即可自动识别并输出。还要注意的是 >> 和 >> 这两个新的操作符。并且十分易于阅读、组装输出内容。具体使用大家自行操作一下很快就能明白。

? ? ? ? 注意到 endl ,这个特殊的保留字段是C++的换行标识符,当使用cout<<endl时,会让输出结果换行。区别C中的\n。

? ? ? ? 当然兼容C,printf()和scanf()仍然适用。?

3、类

? ? ? ? 在C中允许用户使用struct结构体来自定义数据类型,当然C++中也能使用,且在数据结构方面的程序中大量使用。C++中提供了类似的自定义功能,那就是类。

? ? ? ? 类的功能远不止自定义数据类型,它是C从面向过程编程到C++面向对象编程的重要标志,在之后会详细讲解。

struct student
{
    int num;
    float score;
};//结构体

class student
{
    private://以下数据、函数是私有的(但一般就只让数据是私有的,
            //外部不能直接访问,需要用public中的接口函数进行访问)
        int num;
        float score;//数据成员
    public://以下数据、函数是公开的,外部可以直接访问,
           //通常在此编写接口函数对对象的数据成员进行修改
        void setdata()//成员函数
        {
            cin>>num;
            cin>>score;
        };
        void show()//接口函数,打印这个对象的数据成员
        {
            cout<<"num = "<<num<<endl;
            cout<<"score = "<<score<<endl;
        };
}//类

????????这里简单对类和对象进行说明,有个大致的印象:在源文件中定义类,通过实例化获得对象。类相当于描述了一个事物应该具有什么属性,能干什么;对象则是具体到一个实例上,拥有这个实例的详细参数,可以进行操作达成目的。


class student
{
    private://以下数据、函数是私有的(但一般就只让数据是私有的,
            //外部不能直接访问,需要用public中的接口函数进行访问)
        int num;
        float score;//数据成员
    public://以下数据、函数是公开的,外部可以直接访问,
           //通常在此编写接口函数对对象的数据成员进行修改
        void setdata()//成员函数
        {
            cin>>num;
            cin>>score;
        };
        void show()//接口函数,打印这个对象的数据成员
        {
            cout<<"num = "<<num<<endl;
            cout<<"score = "<<score<<endl;
        };
}//类
int main()
{
    student stu1,stu2;//实例化出两个对象
    stu1.setdata();
    stu1.show();
    stu2.setdata();//让stu2这个对象干(执行函数)setdata这个事情
    stu2.show();
    return 0;

}

4、内置(内联)函数

? ? ? ? 在C++中,提供了内置函数这一新特性。使用inline关键字来标识函数,使之成为内置函数。在程序执行时,当遇到一般的函数调用,数据流将跳转到函数体,执行相应的函数操作,再将返回值带回(或者不用返回),接着执行下面环节。但这样势必造成所需时间的增加。内联函数的出现允许一些短而频繁使用的函数在编译时直接将操作写在调用位置,无需跳转,加快了程序运行的速度。任何函数都可通过增加inline关键字变成内置函数,但推荐将短而频繁使用的函数变成内置,不然源文件可就太丑了...例如:

#include <iostream>//<>包含系统库,""包含自定义库
#define pi 3.145159//宏 c语言中实现
const float PI = 3.1415926515;//c艹中使用const定义常变量
//使用const分配了内存空间 define则不会
using namespace std;//命名空间cin cout 定义在这个库内
//或者 std:: cout
void functionsay();
inline int min(int a ,int b)//内置函数,小而频繁的,可直接声明加定义,inline关键字
{
	if (b>a)
	a = b;
	return a;
}
int Max(int x,int y);
int main()
{	
	int a = 1;
	float b = 2;
	cout << a;
	cout << b;
	cout << a << b;
	int x,y;
	cin >> x >> y;
	int out = Max(x,y);
	cout << out;
}

int Max(int x,int y)
{	
	int out ;
	if(x > y)
	{
		out = x;
	}
	else
	{
		out = x;
	}
	return out;
}

5、函数的重载

? ? ? ? 这个特性很重要,这个特性很重要,这个函数很重要。

? ? ? ? 说三边,体现重要性蛤...函数的重载允许C++中两个不同的函数使用相同的名称,然后根据形参的不同、返回值类型的不同来自动识别究竟该调用哪个函数。最简单的,对于比较两个类型的最大值Max(),在int和double两个不同的类型调用时就可以不必编写两个不同名称的函数,简化了思维。

? ? ? ? 同时,对于类内的一些函数,如构造函数,操作符等也都能进行重载,之后会详细说明。

? ? ? ? 根据参数,返回类型来区别到底是哪个重载,也决定了C++在声明函数时,必须是完整的声明,不能像C中那样不给参数声明。

#include <iostream>//<>包含系统库,""包含自定义库
#define pi 3.145159//宏 c语言中实现
const float PI = 3.1415926515;//c艹中使用const定义常变量
//使用const分配了内存空间 define则不会
using namespace std;//命名空间cin cout 定义在这个库内
//或者 std:: cout
void functionsay();
inline int min(int a ,int b)//内置函数,小而频繁的,可直接声明加定义,inline关键字
{
	if (b>a)
	a = b;
	return a;
}
double Max(double x ,double y);

int Max(int x,int y);
int Max();
int main()
{	
	int a = 1;
	float b = 2;
	cout << a;
	cout << b;
	cout << a << b;
	int x,y;
	cin >> x >> y;
	int out = Max(x,y);
	cout << out;
}
int Max()
{
	cout<<"没有参数哦~~"<<endl;
};
int Max(int x,int y)
{	
	int out ;
	if(x > y)
	{
		out = x;
	}
	else
	{
		out = x;
	}
	return out;
}
double Max(double x, double y)
{
	double out ;
	if(x > y)
	{
		out = x;
	}
	else
	{
		out = x;
	}
	return out;
};

6、变量的引用

????????先思考一个问题:当我们把实参传给一个函数的形参时,在函数里的操作针对的是实参还是形参?相信大家都知道,是形参。就比如交换两个变量的值这个函数,在C语言中我们是通过指针实现的。

void cswap(int *a,int *b)
{   //用指针的形式实现
    int temp;
    temp = *a;
    *a = *b;
    *b = temp;
}

????????只有通过这样 ,才能使得两个内存中的数据进行交换

?????????如果不使用指针,直接把实参传递到形参,则把实参的数据拷贝到形参所代表的内存空间里,在操作后原本的实参没有变化。因此需要传递指针,对内存空间上的数据进行修改。

? ? ? ? 但是类似的指针操作过于繁琐,也不利于程序的可读性。因此C++提供了一个新的特性:变量的引用。

? ? ? ? 先来看下怎么引用

int aliass()
{
    int a;
    int &b = a;
    //初始化引用 类型需要保持一致 共享同一内存单元

    int c;
    int &d =a;//引用
    int *p = &a;//指针
    
}

? ? ? ? 这个没有任何意义的函数里演示了如何建立引用。就是通过

类型 & 引用变量明 = 要被引用的变量?

? ? ? ? 这个引用相当于是变量的别名,对于引用的修改会直接作用到变量的内存空间,相当于两个变量共享同一内存空间。

? ? ? ? 那么对于上面的swap函数就可以写成这样?

void swap(int &a,int &b)
{   //引用实例 可以不必使用指针
    int temp;
    temp = a;
    a = b;
    b = temp;
}

? ? ? ? 代码瞬间简单多了?

7、C++程序的编写与实现

????????

?8、总结

? ? ? ? 以上是C++与C的一些基础知识,可以帮助大家快速从C过度到C++,但这只是冰山一角。在接下来的blog中将重点讲解C++的特性。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-10-08 20:22:11  更:2022-10-08 20:23:05 
 
开发: 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年5日历 -2024/5/19 6:00:43-

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