C++关键字入门(小白必看)

目录

0、C++关键字

1、asm

2、catch、throw、try

3、inline

4、bool、true、false

5、*_cast

6、typeid获取类型信息

7、private、protected和public

8、typename

9、mutable

10、wchar_t

11、explicit显式调用

12、namespace命名空间定义

13、export全局引用

14、new、delete操作内置类型

15、using

16、friend 友元函数

17、class类的定义

18、operator 

19、virtual虚函数

20、template函数模板

21、this指针


0、C++关键字

C++98总计有63个关键字,C语言有32个关键字

asm do if return try continue
auto double inline short typedef for
bool dynamic_cast int signed typeid public
break else long sizeof typename throw
case enum mutable static union wchar_t
catch explicit namespace static_cast unsigned default
char export new struct using friend
class extern operator switch virtual register
const false private template void true
const_cast float protected this volatile while
delete goto reinterpret_cast

备注:图中红色标志的是C++98中除C语言的关键字,蓝色标注的是C语言的32个关键字。C++11中有73个关键字,新增加的10个分别为:alignas、alignof、char16_t、char32_t、constexpr、decltype、noexpect、nullptr、static_assert、thread_local。

C语言中的关键字就不多介绍了,这里主要介绍C++中的关键字。

1、asm


        _asm是一个语句的分隔符。不能单独出现,必须接汇编指令。一组被大括号包含的指令或一对空括号。
例:

    _asm
{
 mov al,2
      mov dx,0xD007
      out al,dx
}
//也可以在每个汇编指令前加_asm
 _asm  mov al,2
      _asm  mov dx,0xD007
      _asm  out al,dx


2、catch、throw、try


       用于异常处理。try指定try块的起始,try块后的catch可以捕获异常。异常由throw抛出。throw在函数中还表示动态异常规范。

3、inline


       内联函数,在编译时将所调用的函数代码直接嵌入到主调函数中。各个编译器的实现方式可能不同。

4、bool、true、false


   bool即为布尔类型,属于基本类型中的整数类型,取值为真和假。true和false是具有布尔类型的字面量,为右值,即表示真和假。
注:字面量:用于表达源代码中一个固定值的表示法。

5、*_cast


        即 const_cast、dynamic_cast、reinterpret_cast、static_cast。
        C++类型风格来性转换。const_cast删除const变量的属性,方便赋值;dynamic_cast用于将一个父类对象的指针转换为子类对象的指针或引用;reinterpret_cast将一种类型转换为另一种不同的类型;static_cast用于静态转换,任何转换都可以用它,但他不能用于两个不相关的类型转换。

6、typeid获取类型信息

typeid用于获取类型信息的操作符,使用示例如下:

typeid(a).name()

基本类型对应的类型信息如下表:

基本类型 类型信息
int i
char c
short s
double d
float f
long l

返回结果为标准库种类型的引用。

7、private、protected和public

C++提供private、protected和public访问修饰符,可以修饰类、函数、变量。三者对比如下:

private 私有的,只能在本类、派生类和友元中访问
proteted 保护的,只能在本类和友元中访问
public 公有的,访问不受限制

8、typename


       typename关键字告诉编译器把一个特殊的名字解释为一个类型。

9、mutable


  mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。

例如:

class Person
 {
    
private:
    mutable int m_age; 
public:
    explicit Person(int age);
    const int get_age();
 
};
 
const int Person::get_age()
{
    m_age += 1; // 修改成员变量
    return m_age;
}

10、wchar_t


       表示字符型和宽字符型这些整数类型(属于基本类型),但一般只专用于表示字符。char(和signed char、unsigned char一起)事实上定义了字节的大小。char表示单字节字符,wchar_t表示多字节字符

11、explicit显式调用

explicit用于修饰单参数的构造函数,被修饰的构造函数只能被显式调用,不能被隐式调用。示例如下:

class Person 
{
private:
    int my_age;
public:
    explicit Person(int age);
};

12、namespace命名空间定义

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{} 中即为命名空间的成员。

例如:

namespace my_name
{
 // 命名空间中可以定义变量/函数/类型
 int rand = 10;
 int Add(int left, int right)
 {
 return left + right;
 }

 struct Node
 {
 struct Node* next;
 int val;
 };
}

13、export全局引用

C语言有extern关键字用于声明全局变量,但是C++的模板没法用extern修饰。因此,提供export修饰在头文件声明的模板类或模板函数,其他源文件只要引用该头文件即可使用模板类或模板函数。

14、new、delete操作内置类型

C语言内存管理方式在C++中可以继续使用,但有些地方就无能为力,而且使用起来比较麻烦,因 此C++又提出了自己的内存管理方式:通过new和delete操作符进行动态内存管理。

void Test()
{
  // 动态申请一个int类型的空间
  int* ptr1 = new int;
  
  // 动态申请一个int类型的空间并初始化为5
  int* ptr2 = new int(5);
  
  // 动态申请10个int类型的空间
  int* ptr3 = new int[10];
  delete ptr1;
  delete ptr2;
  delete[] ptr3;
}

注意:申请和释放单个元素的空间,使用new和delete操作符,申请和释放连续的空间,使用 new[]和delete[],注意:匹配起来使用。

15、using


 (1)、在当前文件引入命名空间,例using namespace std;
 (2)、在子类中使用,using声明引入基类成员名称。

16、friend 友元函数

友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但需要在 类的内部声明,声明时需要加friend关键字。

说明:

(1)友元函数可访问类的私有和保护成员,但不是类的成员函数

(2)友元函数不能用const修饰

(3)友元函数可以在类定义的任何地方声明,不受类访问限定符限制

(4)一个函数可以是多个类的友元函数

(5)友元函数的调用与普通函数的调用原理相同

17、class类的定义

class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。

类体中内容称为类的成员:类中的变量称为类的属性或成员变量; 类中的函数称为类的方法或者成员函数。

class className
{
// 类体:由成员函数和成员变量组成
};  // 一定要注意后面的分号

18、operator 

  
       和操作符连用,指定一个重载了的操作符函数,比如,operator+。

19、virtual虚函数

       虚函数是C++的多态机制,使用virtual关键字声明,允许通过基类指针访问基类与派生类的同名函数。基类的析构函数需要声明为虚函数,否则调用不到派生类的析构函数,导致内存泄漏。

20、template函数模板

概念:函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定 类型版本。

函数模板格式:template 返回值类型 函数名(参数列表){}

template
void Swap( T& _left, T& _right)
{
 T temp = _left;
 _left = _right;
 _right = _temp;
}

注意:typename是用来定义模板参数关键字,也可以使用class(切记:不能使用struct代替class)

21、this指针

this指针的引出:

        C++编译器给每个“非静态的成员函数“增加了一个隐藏 的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有“成员变量” 的操作,都是通过该指针去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编 译器自动完成。

this指针的特性:

1. this指针的类型:类类型* const,即成员函数中,不能给this指针赋值。

2. 只能在“成员函数”的内部使用。

3. this指针本质上是“成员函数”的形参,当对象调用成员函数时,将对象地址作为实参传递给 this形参。所以对象中不存储this指针。

4. this指针是“成员函数”第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传 递,不需要用户传递 。

你可能感兴趣的:(c++,开发语言)