c++primer读书笔记(二)--基本知识下

本文介绍了C++编程中的常量、引用和类定义的基础概念,包括常量的作用域、引用的使用规则以及类定义中的常见错误。详细解释了常量如何在文件间传递信息,引用的初始化方式以及类定义中分号的重要性。

1.const

const int a = 23 ;

const 对象默认为文件的局部变量

假如const int a = 23定义在file1.c中,那么同一个程序中的file2文件就无法通过extern来使用file1中的a了 但是

// file1
extern const int a =12 ;
// file2
extern const int a ; // use a from file1

非const变量默认为extern,要使const变量能在其他文件中访问,必须显示的指定为extern

2. reference: 对象的另一个名字。

不能定义引用类型的引用,但可以定义任何其他类型的引用

引用必须用与该引用同类型的对象初始化

int ival = 1024 ;
int &refval0 = ival ; // ok
int &refval1 ;  // error :must be intialzed
int &refval2 = 10 ;  // error :initilizer must be an object

当引用初始化后,只要该引用存在,它就保持绑定到初始化时指定的对象。不可能将引用绑定到另一个对象。

初始化时指明引用指向那个对象的唯一办法

const 引用:指向const对象的引用。

const int ival = 1024 ;
const int &refval = ival ;//ok: both reference and object are const
int &refval = ival ; // error: nonconst reference to a const object 

可以读取但不能修改refval

即:const 引用是指向const 的引用

const引用可以初始化为不同类型的对象或者初始化为右值,如字面值常量:

int i = 42 ;
const int &r = 42 ;
const int &t = r + i ;
double dval = 3.14 ;
const int &r=dval ;

编译器会把这些代码转化成如下形式的编码:

int temp = dval ;
const int &r = temp ;

?????double dval = 3.14 ;   const double &ival = dval ?????????

非const引用只能绑定到与该引用同类型的对象。

const引用则可以绑定到不同但相关的 类型的对象或者绑定到右值。

3.

 class A{
    public:

       ...
 
    private:

       ...

} ;

编程新手经常会忘记类定义后面的分号,这是一个很普遍的错误!

定义类数据成员与定义变量有非常重要的区别:一般不能把类成员的初始化作为其定义的一部分。当定义数据成员时,只能指定该数据成员的名字和类型

4.

 struct A{
	// operation
    private:
	// data
};

struct和 class关键字定义类的唯一差别在于默认访问级别:默认情况下,struct的成员为public,而class的成员为private。

5. 头文件包含在多个源文件中,所以不应该含有变量或函数的定义。但是头文件可以定义类,值在编译时就已经知道的const对象inline函数。这些实体可以在多个源文件中定义,只要每个源文件中的定义是相同的。

6.预处理器:

#include设施是c++预处理器(preprocessor)的一部分。

系统的头文件可能用特定于编译器的更高效的格式保存。

头文件可以包含其他头文件,因此,设计头文件时,应该使其可以多次包含在同一源文件中。我们必须保证多次包含同一头文件不会引起该头文件定义的类和对象被多次定义。

使得头文件安全的通用做法,是使用预处理器定义头文件保护符(header guard)。

预处理器常量的名字在程序中必须是唯一的。任何与预处理器常量相匹配的名字的使用都关联到该预处理器常量。为避免名字冲突,预处理器常量经常用全大写字母表示。

可以如下避免同一个头文件被多次定义:

#ifndef CAR_H
#define CAR_H  
// definition of  class car and related function goes here 
#endif

头文件应该含有保护符,即使这些头文件不会被其他头文件包含。编写头文件保护符并不困难,而且如果头文件被包含多次,它可以避免难以理解的编译错误。

我们可以用定义在头文件中的实体(如类)来命名预处理器常量来避免预处理器常量重名的问题。

#include <iostream>       标准头文件,编译器会在预定义的位置集查找该头文件,这些预定义的位置可以通过设置查找路径环境变量或者通过命令行选项来修改。使用的查找方法因编译器的不同而差别迥异。

#include "our_header.h"   非系统头文件,非系统头文件的查找通常开始于源文件所在的路径。

转载于:https://www.cnblogs.com/hunteo/p/3239786.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值