c++入门:基本概念

Java和c++非常相似

Java和c++在C语言中都有一个共同的继承。c++是C语言的面向对象扩展,而Java被设计为c++的简化继承者。

赢博体育这些语言都共享相同的核心语言特性,包括以下内容

  1. 基本数据类型基本相同:int、char、float、long、double。这里唯一显著的区别是,Java中的char数据类型是16位数据类型,而c++中的char是8位数据类型。
  2. 这两种语言都有一个布尔数据类型来存储真/假值。在Java中,这种类型称为a布尔,在c++中保龄球
  3. 赋值、基本类型初始化和算术的语法是相同的。
  4. 赢博体育决策结构,包括如果其他……,开关都是相同的。(尽管c++没有for-each样式循环。)

函数的语法,包括声明返回类型和参数类型,以及return语句的使用,很大程度上从Java延续到了c++。c++有一些额外的特性,我们将在下面看到。

c++的第一个程序

这里显示的程序读取用户从控制台中输入的两个整数,将数字相加并将结果打印回控制台中。

#include <iostream> int main (int argc, const char * argv[]) {int a,b,c;std::cout << “输入两个整数:”;* * * * * * * * * * * * * *;C = a + b;std:: cout < <“总和”< < < <”和“< < < < b”是“< < c < < std:: endl;返回0;}

c++程序的结构

Java和c++在语法上的第一个主要区别是,在Java中,赢博体育内容都出现在类的上下文中。c++和Java一样是一种面向对象的语言,但并不是c++中的赢博体育内容都必须是面向对象的。

在Java中,main方法在特定类中以静态方法的形式出现。在C语言中,main函数总是出现在任何类的上下文之外的自由函数。在整个第一套讲义中,我只会讨论自由函数。后面的讲座将介绍c++中的类。

包括报表

与Java import语句等价的c++语句是#include语句。包括两种不同的品种。系统包含通过在包含的文件名周围使用尖括号表示,用于导入与c++标准库和其他资源相关的声明。用户包含(在包含的文件名周围用引号表示)用于导入存储在头文件中的声明,这些声明已作为项目的一部分创建。

#include <iostream> //用于导入c++输入/输出流#include <fstream> //用于导入c++文件流#include <string> //用于导入字符串类#include "Example.h" //用于导入自己编写的头文件

我们将要看到的前几个示例将只使用系统包含。当我们查看c++中多源文件程序的第一个示例时,我将重新讨论用户包含的使用。

名称空间

Java使用包机制来减少名称冲突的可能性。赢博体育的类都必须属于一个包。两个具有相同名称的类可以共存,只要这两个类属于不同的包。

c++名称空间大致相当于Java包,具有相同的目的。要创建名称空间并在名称空间中放置一些项,您可以使用名称空间声明。

命名空间MyStuff{//在这里声明类、函数和变量}

由于我们在本课程中主要编写小程序,因此不需要经常创建名称空间。

未在名称空间中显式声明的项放置在全局名称空间中。

如果您想使用在名称空间内声明的内容,您必须做以下两件事之一。您的第一个选择是使用限定名,其中包括名称空间的名称。例如,如果您想使用c++标准库附带的string类,则必须使用其完全限定名。

std::string str = “一些文本”;

在上面的示例中,我使用了一些从std名称空间导入的对象。您可以通过它们的std::前缀轻松区分它们。

第二个选项是使用using声明从名称空间导入项。

使用std:: string;//从std命名空间导入字符串string str = "Some text";//现在我们可以使用string而不用std::

这种using声明通常出现在源文件的顶部,就在#include语句之后。

第三种选择是从一个特定的命名空间导入赢博体育内容:

使用命名空间std;//从整个std空间导入名称

这个选项有点生硬,因为它会将其他名称空间中的赢博体育内容拉到当前名称空间中。如果不小心,这可能会导致名称冲突。例如,std名称空间包含许多常用的实用函数,例如min()。如果你试图用这个名字来声明你自己的函数,你可能会得到一个编译器错误,说这个函数已经被声明了。

使用上面using声明的一种比较安全的方法是,只在需要的地方使用它来限制它的作用域。例如,下面是我们的第一个示例程序的一个版本,它遵循这种策略,将std名称空间的使用限制为只有两个函数需要输入或输出。

#include <iostream> void inputNumbers(int& 1,int& 2){使用命名空间std;cout << “输入两个整数:”;中国>> 1 >> 2;} void outputNumbers(int 1,int 2,int 3){使用命名空间std;cout << “ << one << “和” << two << ”的和是" << three << endl;} int main (int argc, const char * argv[]) {int a,b,c;inputNumbers (a, b);C = a + b;outputNumbers (a, b, c);返回0;}

注意,由于我没有在这个示例中使用名称空间声明,因此这里定义的赢博体育三个函数都被认为是全局名称空间的成员。例如,上面第一个函数的限定名是::inputNumbers。请注意,如果给定名称空间中的一个函数想要调用同一名称空间中的另一个函数,它不必为正在调用的函数使用限定名。

Cin、cout和文件流

在设计Java时,人们期望用Java语言编写的大多数程序都使用图形用户界面。实际上,用Java编写GUI赢博体育程序比用c++编写要容易得多。Java的期望是相对较少的赢博体育程序将通过控制台使用文本输入和输出。在c++中,期望程序员经常编写在控制台窗口中使用文本输入和输出的赢博体育程序。因此,c++使编写控制台赢博体育程序变得更加容易。

执行文本输入和输出的基本机制是iostreams工具。要使用此功能,需要放置include语句

# include < iostream >

在任何想要进行文本输入和/或输出的源文件的顶部。

要执行文本输出,可以将std::cout对象与流注入操作符<

Int x = 5;Float y = 6.3;std:: x cout < <“x是”< < < <”和y是“y < < < < std:: endl;

将此与Java的等效代码进行比较:

system . out。Println (“x是” + x + “, y是” + y ");

要从控制台中进行文本输入,可以结合使用std::cin对象和流提取操作符>>。这里有一个典型的例子。

int年代;浮动t;std::cout << “输入一个整数和一个浮点数:”;* * * * * * * * * * * * * * *

当遇到涉及cin的语句时,程序执行将暂停并等待来自用户的适当输入。一旦用户输入了cin语句所请求的数据,执行将继续。

文本文件的输入和输出使用类似的语法。要使用文件流功能,请使用include语句

# include < fstream >

下面是一个示例,展示了如何打开和使用文件流输出到文本文件。

std:: ofstream;//创建一个输出文件流对象out.open("numbers.txt");//将流与文件输出关联<< “Hello, world!”< < std:: endl;out.close ();

使用文本文件作为输入也是类似的。

Int x, y;std:: ifstream;//输入文件流对象in.open("data.txt");//打开>> x >> y中的数据文件;//在.close()中读取两个int型;

c++中的数组

c++中的数组有两种类型:自动数组和动态数组。自动数组的大小是固定的,并使用如下声明创建

int [100];

一个动态数组被分配new。下面是用于分配动态数组的语法。

int *B = new int[100];

本例中的数组变量是指针变量的一个示例。指针变量包含关于其他东西所在位置的信息。在本例中,指针变量B将包含我们用new创建的数组的位置信息:指针指向数组中的第一个元素。

动态数组提供的主要优点是允许您在运行时指定数组的大小。自动数组的大小必须在编译时确定。

你需要存储多少个数字?”;int n;中国b> > n;int [n];//非法-自动数组必须有大小//编译时固定。int *B = new int[n];//合法,首选。

尽管这些数组以不同的方式设置,但它们的工作方式完全相同。在这两种情况下,都可以使用括号符号来访问数组的单个元素。

A[0] = 2;//标准数组符号B[0] = 2;//同样的符号也适用于动态数组

您可以将这两个数组传递给函数。例如,这里有一个函数,它将一个整数数组的内容输出到cout。

void printArray(int X[],int N) {for(int k = 0;k < N;k++) std::cout << X[k] << std::endl;}

请注意,由于c++不允许您通过X.length语法询问数组的长度,因此我们必须将数组的大小作为参数显式地传递给函数。要用上面创建的数组B调用这个函数,我们将这样做

printArray (B、n);

当你用new创建的数组用完后,你必须用delete[]操作符销毁它:

删除[]B;