【JAVA程序员学C++】第三节、JAVA里面没有的关键字

前言:
C++的入门基础我是差不多学了个七七八八,写可能有问题,但是看代码基本上都能看懂了。我发现C++和JAVA在语法上还是比较相似,对于我们JAVA程序员来说,最大的障碍就是一些关键字,C++的独有的关键字太多,所以这一节,我把JAVA里面没有的关键字且相对来说常用的都列举说明一下,看完本节,看C++的代码应该问题不大了。

1、#define

这个东西在源码里面能经常看到,跟#include的逻辑差不多,大致意思就是在预处理的时候,就替换为正常的变量。看以下示例代码:

#define A 20
#define B 2

int main() {
    int c = A * B;
    std::cout << c; //输出为40
    return 0;
}

在预处理的时候,只会替换,我的理解是类似于ctrl_c,ctrl_v这样替换,所以不会去运算,即使是一个运算式,也会在替换后,执行的时候再去运算拼接,看以下例子。

#define A 20
#define B 2+2

int main() {
    int c = A * B;
    std::cout << c;  //输出结果为42
    return 0;
}

2、const

类似于JAVA里面的final,一旦赋值,不能修改。


    const int c = A * B;
    c = c - 1; //编译器会报错

3、extern

暴露出去的属性,export修饰的函数或者变量,可以在其他模块直接使用。
比如: cout 就是一个extern修饰的变量。

extern ostream cout;		/// Linked to standard output

4、virtual

个人理解如下,是在多态的时候用的。对于java来说,多态的情况比比皆是,我们甚至也习惯了当子类对象指向为父类引用,调用的方法结果还是会先从子类里面找,找不到该方法才会去父类找。但是在C++却不是这个逻辑,如果在父类方法去掉virtual 这个关键字,就算new的是一个子类对象,只要引用变量是父类,那么就会调用父类的方法。

public:
    virtual void eat(){
        cout << "man eat..";
    }
};

class student:public man{

public:
    void eat(){
        cout << "student eat..";
    }
};

int main() {
    man *stu=new student;
    //父类eat方法加上virtual关键字后,这里才会输出 student eat..
    stu->eat(); 
    return 0;
}

5、operator

对运算符进行重载。所以说,在C++里面,我们可以实现自定义运算符逻辑。

class A{
public:
    A operator++() {
        cout << "before add..";
    }

    A& operator++(int) {
        cout << "after add..";
    }
};


int main() {
    A a;
    a++; //控制台输出 before add..
    ++a; //控制台输出 after add..
}

6、template,export,typename

template:声明一个模板,模板函数,模板类等。模板的特化。
export:使用该关键字可实现模板函数的外部调用。
typename:这个关键字用于指出模板声明(或定义)中的依赖的名称(dependent names)是类型名,而非变量名。
这几个关键字我也没研究明白,后面多看看再说吧。

7、typedef

这个关键字的用途就是取别名,例如把一个特别复杂的类型定义,换一个简单的名称。例子如下:

typedef unsigned short WORD;  

WORD word;  //word的实际类型就是 unsigned short

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