本文你可以了解到
本文使用对比的方式,将
C++
与我们非常熟悉的Java
进行对比学习,介绍C++
与Java
使用的异同,帮助大家快速入门C++
。
一、 C++ 基本数据类型
C++ 提供了一下几种基础数据类型
类型 | 关键字 |
---|---|
布尔型 | bool |
字符型 | char |
整型 | int |
浮点型 | float |
双浮点型 | double |
无类型 | void |
同时,这些类型还可以被类型修饰符修饰,拓展出更多的数据类型:
类型修饰符 | 关键字 |
---|---|
有符号类型 | signed |
无符号类型 | unsigned |
短类型 | short |
长类型 | long |
其中 signed
和 unsigned
指定了数据是否有正负; short
和 long
主要指定了数据的内存大小。
由于不同的系统,同个数据类型所占用的内存大小也不一定是一样的,以下是典型值:
类型 | 内存大小 | 范围 |
---|---|---|
char | 1 个字节 | -128到127 或 0到255 |
unsigned char | 1 个字节 | 0 到 255 |
signed char | 1 个字节 | -128 到 127 |
int | 4 个字节 | -2147483648 到 2147483647 |
unsigned int | 4 个字节 | 0 到 4294967295 |
signed int | 4 个字节 | -2147483648 到 2147483647 |
short int | 2 个字节 | -32768 到 32767 |
unsigned short int | 2 个字节 | 0 到 65,535 |
signed short int | 2 个字节 | -32768 到 32767 |
long int | 8 个字节 | -xxx 到 xxx |
signed long int | 8 个字节 | -xxx 到 xxx |
unsigned long int | 8 个字节 | -xxx 到 xxx |
float | 4 个字节 | -xxx 到 xxx |
double | 8 个字节 | -xxx 到 xxx |
long double | 16 个字节 | -xxx 到 xxx |
可以看到,
short
修饰符将原类型内存大小减小一半;
long
修饰符将原数据类型内存大小扩大一倍。
二、C++ 类
C++
是一门面向对象的语言,类是必不可少的。其类的定义与 Java
大同小异。
Java
类通常声明和定义通常都是在同一个文件 xxx.java
中。
而 C++
类的声明和定义通常是分开在两个不同的文件中,分别是 .h 头文件
和 .cpp 文件
定义一个类
一个 类的头文件
通常如下:
// A.h
class A
{
private: //私有属性
int a;
void f1();
protected: //子类可见
int b;
void f2(int i);
public: //公开属性
int c = 2;
int f3(int j);
A(int a, int b); // 构造函数
~A(); //析构函数
};
对应的类实现文件 A.cpp
如下:
// A.cpp
/**
* 实现构造函数
*/
A::A(int a, int b):
a(a),
b(b) {
}
// 等价于
/*
A::A(int a, int b) {
this.a = a;
this.b = b;
}
*/
/**
* 实现析构函数
*/
A::~A() {
}
/**
* 实现 f1 方法
*/
void A::f1() {
}
/**
* 实现 f2 方法
*/
void A::f2(int j) {
this.b = j
}
/**
* 实现 f3 方法
*/
int A::f3(int j) {
this.c = j
}
可以看到,.h
文件主要负责类成员变量和方法的声明; .cpp
文件主要负责成员变量和方法的定义。
但是,并非一定要按照这样的结构去实现类,你也可以在 .h
头文件中直接定义变量和方法。
比如:
// A.h
class A {
private:
int a = 1;
public:
void f1(int i) {
this.a = i;
}
}
C++ 类中几个特别的地方
1) 可见性 private、protected、public
这几个关键字和 Java
是一样的,只不过在 C++
中,通常不会对每个成员变量和方法进行可见性声明,而是将不同的可见性的变量和方法集中在一起,统一声明,具体见上面定义的类A。
文末名片免费领取音视频开发学习资料,内容包括(C/C++,Linux 服务器开发,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs,Android NDK)以及