专栏首页cwl_JavaC++-入门语法(一)

C++-入门语法(一)

C++ 的发展历史
语法须知
  • C++的源文件扩展名是:cpp(c plus plus的简称)
  • C++程序的入口是main函数(函数即方法,一个意思)
  • C++完全兼容C语言的语法,很久以前,C++叫做C with classes
cin与cout

C++中常使用cin、cout进行控制台的输入、输出

  • cin用的右移运算符>>,cout用的是左移运算符<<
  • endl是换行的意思
#include <iostream>
using namespace std;

// 在Java的世界里,先有类,再有方法(函数)
int main() {

	//cout << "Hello World!" << endl;

	/*cout << "Hello";
	cout << endl;
	cout << "World!";*/

	//cout << "Hello" << endl << "World!";

	/*int age;
	cin >> age;

	cout << "age is " << age << endl;*/

	// Shift + F5:退出程序
	// Ctrl + SHift + F5:重启程序
	// 以上快捷键只针对F5启动的程序

	int a = 10;
	int b = a >> 2;
	// 面向对象 + 运算符(操作符)重载

	// 等待键盘输入
	getchar();

	return 0;
}
函数重载(Overload)
  • 规则
    • 函数名相同
    • 参数个数不同、参数类型不同、参数顺序不同
  • 注意
    • 返回值类型与函数重载无关
    • 调用函数时,实参的隐式类型转换可能会产生二义性
  • 本质:采用了name mangling或者叫name decoration技术
    • C++编译器默认会对符号名(变量名、函数名等)进行改编、修饰,有些地方翻译为“命名倾轧”
    • 重载时会生成多个不同的函数名,不同编译器(MSVC、g++)有不同的生成规则
    • 通过IDA打开【VS_Release_禁止优化】可以看到
#include <iostream>
using namespace std;

/*
C语言不支持函数重载
*/

// g++
// msvc


// display_v
void display() {
	cout << "display() " << endl;
}

// display_i
void display(int a) {
	cout << "display(int a) " << a << endl;
}

// display_l
void display(long a) {
	cout << "display(long a) " << a << endl;
}

// display_d
void display(double a) {
	cout << "display(double a) " << a << endl;
}

// 逆向工程
int main() {
	display();
	display(10);
	display(10l);
	display(10.1);

	getchar();

	return 0;
}
extern “C”
  • 被extern "C"修饰的代码会按照C语言的方式去编译
  • 如果函数同时有声明和实现,要让函数声明被extern "C"修饰,函数实现可以不修饰
  • 由于C、C++编译规则的不同,在C、C++混合开发时,可能会经常出现以下操作
    • C++在调用C语言API时,需要使用extern "C"修饰C语言的函数声明
  • 有时也会在编写C语言代码中直接使用extern “C” ,这样就可以直接被C++调用
#include <iostream>

//extern "C" {
#include "sum.h"
//}

// C语言库

using namespace std;

//extern "C" void func() {
//	cout << "func()" << endl;
//}
//
//extern "C" void func(int a) {
//	cout << "func(int a) " << a << endl;
//}

//extern "C" {
//	void func() {
//		cout << "func()" << endl;
//	}
//
//	void func(int a) {
//		cout << "func(int a) " << a << endl;
//	}
//}

//extern "C" void func();
//extern "C" void func(int a);

//extern "C" {
//	void func();
//	void func(int a);
//}

int main() {
	/*func();
	func(10);*/

	cout << sum(10, 20) << endl;

	getchar();

	return 0;
}

//void func() {
//	cout << "func()" << endl;
//}
//
//void func(int a) {
//	cout << "func(int a) " << a << endl;
//}
#include "sum.h"

// _sum
int sum(int a, int b) {
	return a + b;
}

int minus(int a, int b) {
	return a - b;
}
#ifndef __SUM_H
#define __SUM_H

#ifdef __cplusplus
extern "C" {
#endif // __cplusplus

int sum(int a, int b);
int minus(int a, int b);

#ifdef __cplusplus
}
#endif // __cplusplus

#endif // !__SUM_H

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 数据结构与算法-快速排序算法

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    cwl_java
  • C++-入门语法(二)

    cwl_java
  • Java基础-标识符Identifier

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    cwl_java
  • Linux 多进程通信开发(七): unix domain socket 之 UDP 通信

    前面的文章一系列文章有介绍了 linux 下常见的 IPC 机制,如管道、消息队列、信号量、共享内存。

    Frank909
  • 一款儿童编程入门的理想工具——PythonTurtle

    今天偶然发现了一款Python入门的理想工具PythonTurtle。非常容易上手,强烈推荐一下。PythonTurtle的灵感来源于早期编程语言Logo,也是...

    一石匠人
  • C++入坑

    给变量设置一个集合,该变量的值只能从该集合中取为枚举类型。且,转为int类型的初始值为0~6,可以设置其int值

    mySoul
  • int **a[3][4] 和 size

    BS的《C++编程》里面讲得很清楚,变量的申明,变量名称的后面部分比前面部分具有更强的约束力。

    用户2398817
  • golang 函数定义及其接口实例

    /有返回值 且返回一个 func max(a int, b int) int { if a > b { return a } ...

    李海彬
  • 算法导论第四章分治策略实例解析(一)

    一、第三章简单回顾   中间略过了第三章, 第三章主要是介绍如何从数学层面上科学地定义算法复杂度,以致于能够以一套公有的标准来分析算法。其中,我认为只要记住三...

    CloudDeveloper
  • 关于位域如何节省内存(C++)

             位域:  最先使用在c语言中后来C++继承了这一优良的特点。          举个栗子:     int  -->  4字节   2^32位...

    Gxjun

扫码关注云+社区

领取腾讯云代金券