栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++入门

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++入门

目录
    • c++难学吗
    • C++关键字
    • 1 命名空间 namespace关键字
      • 1.1.1命名空间的定义
      • 1.1.2 命名空间的嵌套
      • 1.1.3 命名空间的使用
      • 1.2 using namespace std 是什么意思?
    • 2 缺省参数/默认参数
      • 2.1 全缺省
      • 2.2 半缺省
    • 3 函数重载

c++难学吗

C++肯定是难学的。C++的语法比Java难20%~30%,但是整体难度是一样的。
学习C++除了掌握必要的语法外,还需要学习STL、高阶数据结构。

在看视频的同时,还需要大量的代码练习,同时还需要阅读大量的书籍。
入门阶段需要阅读《C++程序设计语言》、《高质量程序设计指南》。
潜心修行阶段需要看如《Effective C++》。还需要把《C++ Primer》这本书作为一个语法字典。
阅读过《(More)Effective C++》、《(More)Exceptional C++》、 《EffectiveSTL》及《C++编程规范》等,才适宜踏入专业C++开发之路;

大佬们建议不要把「精通C++」作为一个一年目标,应该要把学习语言作为一个持续的过程,同时要把语言运用在具体的应用场合中。

C++关键字

C++总计63个关键字,C语言32个关键字,C++的出现就是为了解决C语言中不足的地方,所以有很多关键字是一样的,除此之外,还增加了其他的关键字

asmdoifreturntrycontinue
autodoubleinlineshorttypedeffor
booldynamic_castintsignedtypeidpublic
breakelselongsizeoftypenamethrow
caseenummutablestaticunionwchar_t
catchexplicitnamespacestatic_castunsigneddefault
charexportnewstructusingfriend
classexternoperatorswitchvirtualregister
constfalseprivatetemplateviodtrue
const_castfloatprotectedthisvolatilewhile
deletegotoreinterpret_cast
1 命名空间 namespace关键字

在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突,尤其是在公司的大项目中,一个模块有很多人来写,但是不可避免的会有A创建的变量是B创建的一个函数,如果这个变量需要被大量使用,那么不论是谁更改都是一件很麻烦的事情。

使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。

1.1.1命名空间的定义

例如rand是一个函数,但是我现在创建了一个名为rand的变量,很明显就发生了冲突,那么我就定义一个名为sym的空间域,这样就不会发生冲突。

#include
#include
//命名空间域,放在这里和其他的变量隔离
namespace sym
{
	int rand = 100;
}

int a = 0;//全局变量a
int main()
{
	int a = 1;//局部变量
	printf("%dn", rand);//使用的rand函数
	printf("%dn", sym::rand);//使用命名空间sym里面的rand变量

	printf("%dn", a);//访问的局部变量
	printf("%dn", ::a);//域作用限定符,访问全局变量,左边是空白,默认访问全局域
	return 0;//::域作用限定符号
}


命名空间可以定义变量,函数,结构体。。。

1.1.2 命名空间的嵌套

比方说,字节公司有两个小组,一个是做数据的,一个是做缓存的。但是在主函数中,需要他们命名空间中的变量,但是恰好他们定义的变量名相同,这个时候就需要对命名空间再做一次嵌套,以示区别。

#include
#include

namespace byte//字节公司
{
	namespace data//数据组
	{
		struct Node
		{
			int val;
			struct Node* next;
		};
	}
}

namespace byte
{
	namespace cache//缓存组
	{
		struct Node
		{
			int val;
			struct Node* next;
		};
	}
}

int main()
{
	byte::cache::Node n1;
	byte::data::Node n2;
	return 0;
}

同名的命名空间可以同时存在,编译器编译时会合并。

1.1.3 命名空间的使用

按照上面程序
方法一:加命名空间名称及作用域限定符

	byte::cache::Node n1;
	byte::data::Node n2;

方法二:使用using namespace 命名空间名称引入

using namespace byte;
int main()
{
	cache::Node n1;
	data::Node n2;
	return 0;
}

全部放出来,显然就失去了意义

方法三:使用using将命名空间中成员引入

using byte::data::Node;
int main()
{
	byte::cache::Node n1;
	Node n2;
	return 0;
}
1.2 using namespace std 是什么意思?

使用cout标准输出(控制台)和cin标准输入(键盘)时,必须包含< iostream >头文件以及std标准命名空间。

#include
using namespace std;//std 封C++库的命名空间
int main()
{
	cout << "hello world" << endl;
	// >> 流提取
	// << 流插入
	return 0;
}

这相当于是对命名空间使用的第二种方法,把std里面的变量、函数全部放出来。这里给出了我对namespace的理解:

2 缺省参数/默认参数

c语言里面没有这个语法。
在声明或定义函数时为函数的参数指定一个默认值。在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参。

2.1 全缺省

全缺省就是所有的参数都给缺省值。

void TestFunc(int a = 10, int b = 20, int c = 30)
{
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    cout << "c = " << c << endl<
    TestFunc(1, 2, 3);
    TestFunc(1);
    TestFunc(1, 2);
    TestFunc();
    return 0;
}


目前只能一个一个地传,还不能实现只给b传不给a传。

2.2 半缺省

必须从右往左缺省,并且是连续的

void TestFunc(int a, int b = 10, int c = 20)
{
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    cout << "c = " << c << endl<
    
    TestFunc(1);
    TestFunc(1, 2);
    TestFunc(1, 2, 3);
    //TestFunc();
    return 0;
}


当在写数据结构的时候,如果要建立一个栈,需要对它初始化,还需要开辟内存空间。如果使用缺省参数,可以在默认情况下开辟四个空间,如果需要50个空间,只需要传参50就行了。

注意:缺省参数不能在函数声明和定义中同时出现,因为它怕你声明和定义给的缺省参数不一样。
正确的做法是:声明给,定义不给。

3 函数重载

C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 顺序,其中的一个或几个)必须不同,常用来处理实现功能类似数据类型不同的问题。

比如一个加法函数Add,我需要实现的是它的整型相加、浮点型相加、长整型相加,也就是说形参列表需要传入不同的参数。这个时候就需要函数重载。

	#include
	using namespace std;
	int Add(int left, int right)
	{
	    return left + right;
	}
	double Add(double left, double right)
	{
	    return left + right;
	}
	long Add(long left, long right)
	{
	    return left + right;
	}
	int main()
	{
	    cout< 

	void f(int i, double d)
	{
	    cout << "f(int i, double d)" << endl;
	}
	void f(double d,int i)
	{
	    cout << "f(double d,int i)" << endl;
	}
	
	int main()
	{
	    f(2, 2.1);
	    f(2.1, 2);
	
	    return 0;
	}


问:int compare(int ,int)是不是double compare(int,int)的重载函数?
答:不是的。函数重载不能依靠返回值的不同来构成重载,因为调用时无法根据参数列表确定调用哪个重载函数。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/931520.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号