ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

#C++#__常用关键字的理解

2021-01-28 09:31:17  阅读:15  来源: 互联网

标签:函数 int 成员 C++ 关键字 static #__ 构造函数


#C++#__常用关键字的理解

综述

全文主要介绍C++中的常用关键字的含义、用法等等,目前介绍内容包括delete、default、new、static、static_cast、typeid,随着应用的增加逐步补充。
对于专门用于修饰函数的关键字,在另一篇帖子中进行说明1

一、delete

C++代码中,一般是类中的默认成员函数,函数声明后面加了=delete; 表示强制取消系统的默认定义。

二、default

C++代码中,一般是类中的默认成员函数,以构造函数为例说明,如果实现了构造函数的自定义版本,则编译器不再自动产生默认形式的构造函数,比如:若定义了带参的构造函数,编译器不会再产生默认的无参构造函数,此时如果在类外调用了无参构造函数,则会报错,这种情况可以通过“default”来显示指示编译器产生默认形式的无参构造函数
如果没有自定义构造函数的实现,编译器会产生默认形式的构造函数;也可以在无参构造函数声明后面加“=default”,显示指示编译器按系统的默认形式定义无参构造函数。(如果使用default来定义带参构造函数,会报错)
例如:类中定义了带参的构造函数后,通过default关键字显示指示编译器产生不带参的构造函数。

class Fusion{
	Fusion() = default;
	~Fusion() = default;
	Fusion(int sensor);
	}

三、new

关键字new是用于在程序运行时中为变量临时分配内存的C++关键字。
使用关键字new在堆上动态创建一个对象时,它实际上做了三件事:获得一块内存空间、调用构造函数、返回正确的指针。当然,如果我们创建的是简单类型的变量,那么第二步会被省略。
经常使用new来创建类对象,对象一般是指向类的指针。2

#include <stdio.h>
class Test {
public:
	Test(){};
    void print(){printf("Base Test print\n");}
};

int main() {
    Test *test = new Test();  // create object
    test->print();

    delete test;
    return 0;
}

结果:Base Test print

四、static

  1. 作用于函数内部的局部变量
    局部作用域静态变量的特点:当一个函数返回后,下一次再调用时,该变量还会保持上一回的值,函数内部的静态变量只开辟一次空间,且不会因为多次调用产生副本,也不会因为函数返回而失效。3

  2. 作用于类的成员
    用于解决同一个类的不同对象之间数据和函数共享问题。
    (1)作用于类的数据成员,使其成为静态数据成员
    静态成员在每一个类中只有一个副本,由该类所有对象共同维护和使用,从而实现同一个类的不同对象数据共享。需要注意的是:
    访问静态数据成员方式:类名::标识符
    对静态数据成员初始化:在类定义外进行,类内定义只能进行声明
    (2)作用于类的函数成员,使其成为静态函数成员
    静态成员函数就是使用static关键字声明的函数成员,同静态数据成员一样,静态成员函数也属于整个类,由该类所有对象共同拥有,为所有对象共享。
    1)静态成员函数主要用于处理该类的静态数据成员,可以直接调用静态数据成员。如果访问非静态成员,要通过对象来访问。
    2)类外代码一般使用类名和作用域操作符来调用静态成员函数。
    访问方式:类名::函数名,或“类.函数名”

注意: 具体代码示例见参考博客。

六、static_cast

  1. 调用形式:
static_cast < type-id > ( expression ) 
  1. 作用:
    该运算符把 expression 转换为 type-id 类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法:
    ① 用于类层次结构中基类和子类之间指针或引用的转换。进行上行转换(把子类的指针或引用转换成基类表示)是安全的;进行下行转换(把基类指针或引用转换成子类表示)时,由于没有动态类型检查,所以是不安全的。
    ② 用于基本数据类型之间的转换,如把 int 转换成 char,把 int 转换成 enum。这种转换的安全性也要开发人员来保证。
    ③ 把空指针转换成目标类型的空指针。
    ④ 把任何类型的表达式转换成void类?
    注意 static_cast 不能转换掉 expression 的 const、volitale、或者 __unaligned 属性。4

七、typeid

1. 头文件

#include <typeinfo>

2. 作用

返回变量的数据类型
调用方式:
typeid(par).name()

返回值和编译器等有关系,部分如下所示:5

bool:                     b
 
char:                     c
signed char:              a
unsigned char:            h
 
(signed) short (int):     s
unsigned short (int):     t
 
(signed) (int):           i
unsigned (int):           j
 
(signed) long (int):      l
unsigned long (int):      m
 
(signed) long long (int): x
unsigned long long (int): y
 
float:                    f
double:                   d
long double:              e

pointer:                  P

3. 用法示例

八、

1. 头文件

2. 作用

3. 用法示例


  1. #C++#__默认函数功能与使用说明&&修饰函数的关键字 ↩︎

  2. c++ new关键字的用法 ↩︎

  3. C++中的static的作用 ↩︎

  4. c++的关键字即保留字小结 ↩︎

  5. C++ 查看变量数据类型之 typeid().name() ↩︎

标签:函数,int,成员,C++,关键字,static,#__,构造函数
来源: https://blog.csdn.net/sinat_37231928/article/details/110394776

专注分享技术,共同学习,共同进步。侵权联系[admin#icode9.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有