C++基础

本文详细介绍了C++语言中的输入输出操作、函数重载、默认参数设置、按C语言方式编译、防止头文件重复包含、内联函数、宏定义及命名空间等基础知识,并提供了丰富的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 输入输出
  • 函数重载
  • 默认参数
  • 按C语言的方式编译 extern “C”
  • 防止头文件被重复包含
  • 内联函数
  • 命名空间

------------------------------------------------------

输入输出

#include <iostream>

int main()
{
	int a;
	cin >> a;
	cout << a << endl;
	getchar();
	return 0;
}

函数重载

#include <iostream>
using namespace std;

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

double sum(double a, double b,int c)
{
	return a + b + c;
}

int main()
{	
	cout << sum(5,5) << endl;
	cout << sum(4.5, 6.1,2) << endl;
	getchar(); 
	return 0;
}

知识点:1.函数重载可以重载输入变量的顺序、类型、个数,不可重载函数返回类型、函数运算法则(在输入不变的情况下)
2.要区别于函数重写(override),这是子类继承父类后,对函数功能重新实现。重载则是同一个函数名,根据输入不同,定义了多个版本。

默认参数

#include <iostream>
using namespace std;

double sum(int a = 5, int b = 10);

int main()
{	
	cout << sum(5,5) << endl;
	getchar(); 
	return 0;
}

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

知识点:默认参数只能写在函数声明中,不能写在函数实现中,默认参数可以是常数、全局变量、函数名。

按C语言的方式编译 extern “C”

extern "C" double sum(double a, double b);

说明:extern "C"修饰函数声明即可,实现可以不用修饰。
由于函数声明一般写在头文件中,包含头文件则可以直接调用函数,但是加了extern "C"的代码只能在C++中调用,在C程序调用会出错,为了解决这个问题,还需要在头文件中加一个条件编译。

#ifdef __cplusplus
	extern "C"{
#endif
	double sum(double a,double b);
#ifdef __cplusplus
	}
#endif

知识点:__cplusplus是C++文件才有的宏定义,因此在包括头文件时候会编译 extern "C"部分,而C文件中没有__cplusplus,则只编译sum函数,从而使C++和C都可以调用该函数

防止头文件被重复包含

两种手段:条件编译、#pragma once
区别在于:条件编译可以部分包含(写在if和endif之间),部分不包含(写在if和endif外面),而#pragma once不管写在哪里,该头文件的内容被包含一次后就不会被包含了,且#pragma once对老编译器不兼容

#ifndef __TEST_H__
#define __TEST_H__
/*
	代码内容
*/
#endif
#pragma once
/*
	代码内容
*/

内敛函数(inline function)

#include <iostream>

inline double sum(double a,double b)
{
	return a+b;
}

int main()
{
	cout<<sum(0.5,4)<<endl;
	/*
		cout<<sum(0.5,4)<<endl;将被替换成cout<<0.5+4<<endl;
	*/
	getchar();
	return 0;
}

知识点:内敛函数在调用时候,会将函数体内容直接复制到调用的地方

1.函数调用需要开辟栈空间,调用结束会回收栈空间,内敛函数使用减少函数调用开销
2.代码体积不大(10行以下)/频繁调用函数的时候适合使用内敛函数
3.递归函数即便写成内敛函数,实际上也不会是内敛

宏定义(Macro)

#include <iostream>
#define  add(v1,v2) ((v1)+ (v2))

int main()
{
	cout<<add(0.5,4)<<endl;
	/*
		cout<<add(0.5,4)<<endl;将被替换成cout<<0.5+4<<endl;
	*/
	getchar();
	return 0;
}

知识点:宏定义本质是替换,和内敛函数一样能减少函数调用开销,但不推荐用宏,因为宏定义写的不准确,替换结果可能有偏差

命名空间

  • 命名空间用于解决命名冲突的问题,访问需要的类时加作用域即可,例如:
HE::Person person;
person.m_age;
namespace HE{
	class Person{
	int m_age;
	}
}

class Person{
	int m_height
}
  • 在作用域范围内统一使用HE命名空间
using namespace HE;
  • 使用全局命名空间的函数
    fun()不定义在任何一命名空间里,它是全局的命名空间,访问时用::fun()。
#include <iostream>

void fun(){
	...
}

int main(){
	::fun();
	getchar();
	return 0;
}
  • 命名空间的合并
    如果同一命名空间下定义着不同的变量名,两个命名空间内容会合并
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值