【C++ Primer Plus】基础知识 2

简介: 【C++ Primer Plus】基础知识

C++语句

来看下面的程序:

#include <iostream>
int main()
{
    using namespace std;
    int carrots; //声明变量
    carrots=25;
    cout<<"I have ";
    cout<<carrots;
    cout<<"carrots.";
    cout<<endl;
    carrots=carrots-1;
    cout<<"Crunch,crunch.Now I have"<<carrots<<"carrots."<<endl;
    return 0;
}

C++中,空行将声明部分与程序的其他部分分开。

声明语句和变量

 要将信息存储在计算机中,必须指出信息的存储位置和所需的内存空间。在C++中,是使用声明语句来指出存储类型并提供位置标签。

例如声明语句:

int carrots;

这条语句提供了两条信息:需要的内存以及该内存单元的名称。此后,程序将使用名称carrots来标识存储在该内存单元中的值。

 在C++中,所有的变量必须声明。声明通常指出了要存储的数据类型和程序对存储在这里的数据使用的名称。

程序种的声明语句叫做定义声明语句,简称定义。这意味着它将导致编译器为变量分配内存空间。通常·,定义不一定是声明,上述例子中定义是声明。

 对于声明变量,C++的做法是尽量在首次使用变量前声明它。


赋值语句

 赋值语句从右往左进行。

例:

int steinway;
int baldwin;
int yamaha;
yamaha=baldwin=steinway=88;

首先,88被赋给steinway,然后,steinway的值(现在是88)被赋值给baldwin,然后,baldwin的值(88)被赋值给yamaha。

再如:

carrots=carrots-1;

 赋值表达式,从右往左计算,计算算术表达式carrots-1的值即25-1=24赋值给carrots。赋值表达式将这个新值存储到变量carrots对应的内存单元中。

cout的新花样

对于printf(),输出数字或者字符串必须使用格式空字符%d和%s,来指出要打印出来的是字符串还是整数。如果让printf()打印字符串,而错误的提供了整数(%d),printf根本发现不了错误,它将继续处理,显示一堆乱码。

 而C++插入运算符<<将根据其后的数据类型相应地调整其行为。

其他C++语句

使用cin

来看下面的程序:

#include <iostream>
int main()
{
    using namespace std;
    int carrots;
    cout<<"How many carrots do you have ?"<<endl;
    cin>>carrots;
    cout<<"Here are twwo more."<<endl;
    carrots=carrots+2;
    cout<<"Now you have "<<carrots<<" carrots."<<endl;
    return 0;
}

程序的运行情况:

How many carrots do you have?
12
Here are two more.
Now you have 14 carrots.

上面的输出表明,从键盘输入的值(12)最终被赋给变量carrots。

cin>>carrots;

从上面的语句可知,信息从cin流向carrots。就像C++将输出看作是流出程序的字符流一样,它也将输入看作是流入程序的字符流。iostream文件将cin定义为一个表示这种流的对象。输出时,<<运算符将字符串插入到输出流中;输入时,cin使用>>运算符从输入流中抽取字符。通常,需要在运算符右侧提供一个变量,以接收信息。(符号<<和>>被选择用来指示信息流的方向。)

 与cout一样,cin也是一个智能对象。

使用cout进行拼接

cout<<"Now you have "<<carrots<<" carrots."<<endl;

等同于:

cout<<"Now you have ";
cout<<carrots;
cout<<" carrots";
cout<<endl;

也可以将一条语句放在四行上:

cout<<"Now you have "
    <<carrots
    <<" carrots";
    <<endl;

当代码很长,限制输出显示的时候,这种做法很方便。

类简介

  类是用户定义的类型一种数据类型。类描述了一种数据类型的全部属性(包括可使用它执行的操作),对象就是根据这些描述创建的实体。

 类的定义格式如下:

class 类名
{
    权限控制符:
    成员;
};
  • class是定义类的关键字
  • 类名是类的标识符,其命名遵循标识符的命名规范。
  • 类名后面的一对大括号,用于包含类的成员,类的所有成员要在这一对大括号中声明。类中可以定义成员变量(也称为属性)和成员函数(也称为方法),成员变量用于描述对象的属性,成员函数用于描述对象的行为。
  • 声明类的成员时,通常需要使用权限控制符限定成员的访问规则,权限控制符包括publicprotectedprivate,这三种权限控制符的权限依次递减。
  • 大括号的后面的一个分号“;”用于表示类定义的结束。
    下定义一个学生类:
class Student
{
    public:
    void study();
    void exam();
    private:
    int age;
    string name;
};

 学生类Student中有两个成员变量age和name,它们是类的私有成员。此外,该类中还定义了study()和exam()两个函数。它们是类的公有成员。

 通常情况下,类的成员函数在类中声明,在类外实现。

在类外实现成员函数,必须在返回值之后、函数名之前加上所属的类作用域,即“类名::”,表示函数属于哪个类。

void Student::study()
{
    cout<<"学习C++"<<endl;
}
void Student::exam()
{
    cout<<"C++考试成绩100分"<<endl;
}

现在来看cout,它是一个ostream类对象,ostream类定义(iostream文件的另一个成员)描述了ostream对象表示的数据以及可以对它执行的操作,如将数字或字符串插入到输出流中。同样,cin是一个istream类对象,也是在iostream中定义的。

类描述指定了可对类对象执行的所有操作。

 要对特定对象执行这些允许的操作,需要给该类对象发送一条消息。例如,希望cout对象显示一个字符串,应向它发送一条消息,告诉它,“对象!显示这些内容!”

 C++中提供了两种发送消息的方式,一种方式是使用类方法(即上面的成员函数),另一种方式是重新定义运算符,cin和cout采用的就是这种方式。

cout<<"I am not a crook."

这条语句使用重新定义的<<运算符将"显示消息"发送给cout。

相关文章
|
5月前
|
编译器 数据安全/隐私保护 C++
c++primer plus 6 读书笔记 第十三章 类继承
c++primer plus 6 读书笔记 第十三章 类继承
|
4月前
|
C语言 C++ 开发者
C++基础知识(一:命名空间的各种使用方法)
C++在C的基础上引入了更多的元素,例如类,类的私密性要比C中的结构体更加优秀,引用,重载,命名空间,以及STL库,模板编程和更多的函数,在面向对象的编程上更加高效。C语言的优势则是更加底层,编译速度会更快,在编写内核时大多数都是C语言去写。 在C++中,命名空间(Namespace)是一种组织代码的方式,主要用于解决全局变量、函数或类的命名冲突问题。命名空间提供了一种封装机制,允许开发者将相关的类、函数、变量等放在一个逻辑上封闭的区域中,这样相同的名字在不同的命名空间中可以共存,而不会相互干扰。
|
5月前
|
C++
c++primer plus 6 读书笔记 第十四章 C++中的代码重用
c++primer plus 6 读书笔记 第十四章 C++中的代码重用
|
4月前
|
C++
C++基础知识(二:引用和new delete)
引用是C++中的一种复合类型,它是某个已存在变量的别名,也就是说引用不是独立的实体,它只是为已存在的变量取了一个新名字。一旦引用被初始化为某个变量,就不能改变引用到另一个变量。引用的主要用途包括函数参数传递、操作符重载等,它可以避免复制大对象的开销,并且使得代码更加直观易读。
|
4月前
|
算法 编译器 C++
C++基础知识(三:哑元和内联函数和函数重载)
在C++编程中,"哑元"这个术语虽然不常用,但可以理解为在函数定义或调用中使用的没有实际功能、仅作为占位符的参数。这种做法多见于模板编程或者为了匹配函数签名等场景。例如,在实现某些通用算法时,可能需要一个特定数量的参数来满足编译器要求,即使在特定情况下某些参数并不参与计算,这些参数就可以被视为哑元。
|
4月前
|
C++
C++基础知识(四:类的学习)
类指的就是对同一类对象,把所有的属性都封装起来,你也可以把类看成一个高级版的结构体。
|
4月前
|
自然语言处理 程序员 C++
C++基础知识(五:运算符重载)
运算符重载是C++中的一项强大特性,它允许程序员为自定义类型(如类或结构体)重新定义标准运算符的行为,使得这些运算符能够适用于自定义类型的操作。这样做可以增强代码的可读性和表达力,使得代码更接近自然语言,同时保持了面向对象编程的封装性。
|
4月前
|
存储 编译器 C++
C++基础知识(六:继承)
多态是面向对象编程的四大基本原则之一,它让程序能够以统一的接口处理不同的对象类型,从而实现了接口与实现分离,提高了代码的灵活性和复用性。多态主要体现在两个层面:静态多态(编译时多态,如函数重载)和动态多态(运行时多态,主要通过虚函数实现)。
|
4月前
|
存储 编译器 C++
C++基础知识(七:多态)
多态是面向对象编程的四大基本原则之一,它让程序能够以统一的接口处理不同的对象类型,从而实现了接口与实现分离,提高了代码的灵活性和复用性。多态主要体现在两个层面:静态多态(编译时多态,如函数重载)和动态多态(运行时多态,主要通过虚函数实现)。
|
4月前
|
存储 算法 程序员
C++基础知识(八:STL标准库(Vectors和list))
C++ STL (Standard Template Library标准模板库) 是通用类模板和算法的集合,它提供给程序员一些标准的数据结构的实现如 queues(队列), lists(链表), 和 stacks(栈)等. STL容器的提供是为了让开发者可以更高效率的去开发,同时我们应该也需要知道他们的底层实现,这样在出现错误的时候我们才知道一些原因,才可以更好的去解决问题。