C++Primer第二章问题以及感悟

目录

1.cout、cin是什么?

2."<<"表示什么?

3为什么变量必须声明?

4. 字符串中的数字和整型数字有什么区别?

5.连续使用赋值语句的顺序

6.类是什么,有什么作用?

7.对象是什么,有什么作用?

8。函数是什么?

9.函数原型和函数定义的区别?

10.为什么要用名称空间?


1.cout、cin是什么?

1.1cout是什么?

cout是一个ostream对象,ostream是basic_ostream类模板的别名,一般用作输出,处理有序的数据流,它是从 basic_ostream 中创建专用于char的类型。

extern ostream cout;
typedef basic_ostream<char, char_traits<char>> ostream;

1.2cin是什么?

cin是一个istream对象,istream是basic_istream类模板的别名。另外cout、cin等是写在std命名空间下的。

extern istream cin;
typedef basic_istream<char, char_traits<char>> istream;

2."<<"表示什么?

<<一般表示按位左移运算符,但是如果想输出一个字符串,可以用以下代码表示,这里的<<并不是左移运算符,而是运算符重载的一种用法,它在这里表示向输出流中插入数据。可以简单将其理解为一种运算符有多种含义,编译器通过上下文来确定运算符的含义。

cout<<string

相同的运算符用法有&*等,&不只可以表示按位与也可以表示地址运算符;*不只可以表示乘法,也可以表示指针解除引用。

3为什么变量必须声明?

声明通常指出了要存储的数据类型和程序对存储在这里的数据使用的名称,如果没有声明,编译器不知道该变量是什么数据类型,所以不知道应该为变量分配多少内存空间,从而引发错误。所以变量必须声明。

有时候声明和定义是一起的,但是一般情况下声明并不等同于定义,函数的声明一般放在.h头文件中,而定义一般放在.cpp文件中,这样做的目的是为了代码清晰明了。

4. 字符串中的数字和整型数字有什么区别?

字符串"38"表示的是字符"3"和"8",它存储的是3和8的编码,而整型的38表示的就是数字38,将38转换成二进制存储起来。

5.连续使用赋值语句的顺序

"="称为赋值运算符,赋值运算是从右向左进行的。

6.类是什么,有什么作用?

6.1类是什么?

类是用户定义的一种数据类型,其中包含了一系列的数据格式以及用法,可以将这一系列的数据格式和用法表示为属性,所以类描述了一种数据类型的全部属性(包括它可执行的操作),

类中很很重要的关键词就是class,后面是类名,写法表示为:

class ClassName
{
public:
    ...
private:
    ...
protected:
    ...

}

代码块中包含成员变量、成员方法等能反映类特征的内容,他们有公有、私有、保护等属性的区别,这会在后面的章节讲到。

6.2类的作用

通过类的定义和封装来完成程序,一方面是满足安全性,提高代码的鲁棒性;另一方面是因为一个类中封装的都是一系列相关的内容,便于阅读和修改,更容易聚焦和扩展;还有就是类中的成员有不同的属性,可以选择其中的成员是否能被其他某些函数访问,或者是否只能自己访问等设置。最后就是类有继承的机制,当我们只需要用到一个类中的一部分成员,并且需要添加新内容的时候,不需要自己重新编写一个类,而可以使用继承的机制来简化我们的步骤。

7.对象是什么,有什么作用?

7.1对象是什么?

对象之于类就像变量之于类型,也就是说类定义描述的是数据格式和用法,对象就是根据这些属性创建的实体。用现实生活中的例子来描述就好如类是一群车的组合,而具体的对象就是一辆公交车,公交车具有一部分车的属性,但是不能说公交车是小轿车,它并不包含小轿车的某些属性,他们之间有共性,但是也有自己特有的属性。

7.2对象有什么作用?

类描述了可对类对象执行的所有操作对象通过调用类中的成员来执行一系列允许的操作,从而得到我们想要的结果。

8。函数是什么?

函数用于创建C++程序的模块,对C++的OOP定义至关重要,函数分为有返回值和没有返回值两种类型。

                                函数的组成部分

在创建函数时,必须编写其定义。所有函数定义包括以下组成部分:

  • 名称:每个函数都必须有一个名称。通常,适用于变量名称的规则同样也适用于函数名称。

  • 形参列表:调用函数的程序模块可以向其发送数据。形参列表是保存传递给函数的值的变量列表。如果没有值传递给函数,则其形参列表为空。

  • 主体:函数的主体是处理函数正在执行的任务的一组语句。这些语句包含在一组大括号中。

  • 返回类型:函数可以将值发送回调用它的程序模块。返回类型是要发送回的值的数据类型。

9.函数原型和函数定义的区别?

正如之前介绍的,函数原型和函数定义一般不写在一起的,头文件包含函数原型,而定义写在库文件中,原型只描述函数的接口,它只描述了发送给函数的信息和返回的信息;而定义包含函数具体意义的代码。

10.为什么要用名称空间?

因为在编写不同用途的代码中,可能会定义相同名称的函数如Example(),这个时候就会很乱,因为我们可能并不记得需要调用的是哪个库中的函数Example(),而且编译器也并不知道我们想要调用的是哪个库中的Example()。

因此,引入了命名空间这个概念,专门用于解决上面的问题,它可作为附加信息来区分不同库中相同名称的函数、类、变量等。使用了命名空间即定义了上下文。本质上,命名空间就是定义了一个范围。

比如我们要调用命名空间CSDN的函数Example()可以表示为:

/*使用using编译指令*/
using namespace CSDN;
....
Example();



/*或者不想要调用CSDN命名空间中的其他代码,只需要调用Example()函数*/
using CSDN::Example();

 

 

发布了22 篇原创文章 · 获赞 2 · 访问量 489

猜你喜欢

转载自blog.csdn.net/weixin_42709632/article/details/103850872