本文概览
- 本文主要是对学习C ++ 时候的一些疑惑进行总结,对于语言中的与其他语言的共同部分,例如流程控制语句,循环等就不再赘述
- 相较于一些开发语言如 python,java而言,C++ 的语言偏向于底层,且是在C 语言的基础上建立的,一方面需要有C 语言的基础,另一方面需要对计算机运行程序的具体过程有一个大概的了解,拥有这两方面的基础对于学习C ++有很大帮助
- 学习的一些网站,由于C ++ 语言历史悠久,相关的资料也很多
C ++ 特性
- 程序运行过程如下图,由于C ++ 是编译型语言,编写完程序后,需要先将程序编译为可执行文件,windows 上通常以
.exe
结尾,然后再运行就可以了
- C ++ 就是基于 C语言的面向过程然后增加了一些面向对象的编程方式,C 语言中的指针,引用被保留了下来,称为动态分配内存
学习C ++ 的几个问题
-
为什么要学 C++?
- 因为学业的关系,考这门课程,也是抱着开放的角度去学习这门语言,希望对自己的开发思维有一定的拓展
- C ++ 目前在TIOBE 编程语言排行榜上稳定在 3,4名左右,说明很多人都在使用,或者很多人都在了解这门语言
- C ++ 最出色的产品是 windows 操作系统,以前的windows系统完全是由C 语言编写的,随着时间的推移,微软更加倾向于使用C++进行编写,C++语言在windows中的比重越来越重
- 学习C ++ 能够做什么
- 我了解的C++主要是用来写一些windows客户端软件,还有一些基础服务的东西,更重要的是,C++在写游戏方面有着无可比拟的优势
-
C ++ 和 C 语言是什么关系?
- 与其说是两种语言,不如说C ++ 和 C 语言是同一种语言,因为 C ++ 包含 C 语言,C 语言的代码不需要做很大的变动就能直接编译运行
- C ++ 对于 C 语言增加了面向对象的编程方式
C ++ 中的一些基础规则
首先看一个C ++代码
#include <iostream>
//声明命名空间std
using namespace std;
void func(){
cout<<"你好"<<endl;
}
int main(){
cout<<"你好"<<endl;
func();
return 0;
}
- 代码结尾使用
;
, 代码块使用{}
,与大多数语言一致,且代码的缩进不做严格区分 - 代码有一个main 函数,作为整个文件的运行入口
- 头部引入标准库,cout 就是iostream 这个标准库的成员
- 命名空间后面再叙述
面向对象的一些术语
- 模板
- 向量
- 虚函数
- 友元函数
- 纯虚函数
1. 模板
- 强类型语言 C++,两个函数,只有函数名一样,以及形参的类型个数,和类型,返回值的类型,完全一样时,才会冲突,使用函数名一样,形参个数和类型不完全一样的函数被称为多态
- 而 python 中,对形参类型和返回值类型不做类型判断,在实现函数时,自带多态性
- 模板,就是用来实现像 python 的函数一样的功能
# python 版本
def add_func(a, b):
return a + b
a = 1
b = 2
print(add_func(a, b))
a = 1.1
b = 2.2
print(add_func(a, b))
#include <iostream>
using namespace std;
template <typename T>
T add_func(T a, T b){
return a + b;
}
int main(){
int a = 1;
int b = 2;
cout << add_func(a, b) << endl;
float c = 1.1;
float d = 2.2;
cout << add_func(c, d) << endl;
return 0;
}
2. 向量
- 向量是一种类模板,原生的数组是一个指针,而向量表现出与数组相似的功能,功能上却远胜于数组
3. 虚函数
- A 是父类,B是子类,当使用A声明一个对象引用自B时,调用一个共有的函数 show时,默认这个对象使用 A 的show函数
# include <iostream>
using namespace std;
class A{
public:
void show (){
cout << "the output from A" << endl;
}
A(int x, int y){
cout << x << y;
};
};
class B: public A{
public:
void show (){
cout << "the output from B" << endl;
}
B(int x, int y):A(x, y){
cout << x << y;
}
};
int main(){
A a(1, 2);
B b(3, 4);
A *c = &b;
A & d = b;
c -> show();
d.show();
return 0;
}
结果是
123434the output from A
the output from A
- 将show 变成虚函数后,结果变成了B,只需要在 A 类的show 函数前面加上 virtual
# include <iostream>
using namespace std;
class A{
public:
virtual void show (){
cout << "the output from A" << endl;
}
A(int x, int y){
cout << x << y;
};
};
class B: public A{
public:
void show (){
cout << "the output from B" << endl;
}
B(int x, int y):A(x, y){
cout << x << y;
}
};
int main(){
A a(1, 2);
B b(3, 4);
A *c = &b;
A & d = b;
c -> show();
d.show();
return 0;
}
结果是
123434the output from B
the output from B
- 具体原理 请点击查看原理文章