C++学习路径和书籍

C++学习路线和相关书籍

在这里插入图片描述 上图来源于知乎

C语言书籍:

  1. C primer plus
  2. C专家编程
  3. C和指针
  4. 你必须知道的495个C语言问题

C++入门:

  1. Essential C++
  2. C++ Primer

C++进阶:

  1. Effective C++
  2. More Effective C++
  3. Exceptional C++
  4. More Exceptional C++
  5. The C++ standard library
  6. Effective STL
  7. Generic programming and the STL

深入C++:

  1. Modern C++ design
  2. Inside the C++ object model

一、对象

1.一般规则

  1. 常成员函数:在函数参数表后加一个const,如 int readi() const; //通过函数读取内容,但此函数的语句不可改变任何成员数据
  2. 在类外部定义成员函数的格式:返回值类型 类名::函数名(参数表){语句…}
  3. 同变量的引用,对象的引用也采用&:类名 &对象名a=对象名b; (结果就是取了个别名,对a或b的改动都会影响对方)
  4. 注意:类的成员应该注明是公有(pubilc)还是私有(private),不注明则默认为私有,但应该养成注明的习惯
  5. 成员函数的重载中const也是一种重载
    如:
class A{
   
public:
	A():i(0){
   }
	void f(){
   cout << "f()"<<endl;}					//相当于void f(A* this){...}
	void f() const {
   cout << "f() const" << endl;}	//相当于void f(const A* this) const {...}
};
int main()
{
   
	const A a;	//启用的f函数是f() const
	a.f();		//结果输出的是f() const对应的结果
	return 0;
}

2.一般构造函数

  1. 会随着对象创建而自动被调用,调用时间:全局对象代码在main函数之前时,可以在main函数之前调用,但不同文件中的全局对象之间的调用顺序会随编译器的差别而不同,若不同文件的全局变量之间有相互依赖则容易出错。
  2. 是一个与类同名的公有成员函数,且没有返回值,一般用于初始化成员数据或为对象分配资源(如堆内存空间)
  3. 可以和成员函数重载的概念结合,通过重载多种构造函数参数,实现多种对象初始化操作
  4. 当一个对象(a)中包含其他对象(b,c,d…)时,可以在a的构造函数定义中调用b,c,d…的构造函数:
    格式:类名::构造函数名(参数表):成员对象名(参数表)[,…成员对象名n(参数表)]
    注意:当中的成员对象也可以是成员数据(即不是成员函数),如A::A(int ii):i(ii){},其中i是A类里面的一个int数据,此时表示用ii对i进行初始化,等同于在后面的{}里面写i=ii;
a::a(int i, char c):b(j,k),c(f,g),d(x,y){
   
	...
}
注意:在该过程中首先生成的是成员对象b,c,d...

3.拷贝构造函数(复制对象)

3.1拷贝构造函数的一般性质

和一般构造函数的区别在于其参数为已生成的对象
例:

Node::Node(Node &n){
   	//拷贝构造函数
	idata = n.idata;	//可以读出同类对象的私有成员数据
	cdata = n.cdata;
	next = n.next;
}
int main(){
   
	...
	Node c(x);	//创建一个点c,并将点x复制到点c
}

拷贝构造函数的特点:

  1. 拷贝构造函数能读相同类对象的私有成员数据
  2. 其实质是把参数的成员数据全部复制到新的对象里
  3. 它也是构造函数的一种重载(即参数表形式从一般变量变为对象)

3.2默认拷贝构造函数(浅拷贝)

定义:系统自动给出的,将对象的成员数据全部赋值给新创建对象的成员数据,如果某些成员数据本身就是对象,则自动调用它们的拷贝构造函数或默认拷贝构造函数。
缺点:浅拷贝,无法将动态申请的资源复制过来(如成员数据中有指针,则只能复制指针而不能复制指针指向的内存),在原有数据内存被释放后会导致复制的指针失效。
因此还需要将动态申请的资源也拷贝过来,即深拷贝

3.3深拷贝

在拷贝构造函数中new出新的空间

Linklist::Linklist(linklist &l):head(l.head)
{
   
	cout<<"Linklist Deep Cloner running..."<<endl;
	pcurrent=&head;
	Node *pt1=l.head.readn();	//该指针用于指向原链表中被复制的节点
	while(pt1!=NULL)
	{
   
		Node *pt2 = new Node(pt1-
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以前下载的一些书, 放在这里备份。打包一起上传。懒得弄了。 C.Plus.Plus.for.Engineers.and.Scientists,.Bronson,.3ed,..Course,.2010,.Source.Codes,.0324786433_233683-.exe │ Objective-C.Recipes.A.Problem-Solution.Approach,.Matthew.Campbell,.Apress,.2012-.epub │ Professional.C.Plus.Plus,.Marc.Gregoire,.Nicholas.A..Solter,.Scott.J..Kleper,.2ed,.Wiley,.2011-.epub │ TDDownload.rar │ The.Standard.C.Library,.Plauger.-.(Prentice.Hall,.1992)-.djvu │ Wright.C..1001.Microsoft.Visual.C.Plus.Plus.Programming.Tips.(Prima,.2001)(ISBN.0761527613)(600dpi)(1422s)_CsPl_-.djvu │ XLib.exe │ [300dpi高清版]Cpp.Cookbook.中文版_HD-.pdf │ [Access.2013:The.Missing.Manual(2013.4)].Matthew.MacDonald.文字版..epub │ [Active.Directory(5th,2013.4)].Brian.Desmond.文字版..epub │ [AngularJS(2013.4)].Brad.Green.文字版..epub │ [Building.a.DevOps.Culture(2013.4)].Mandi.Walls.文字版..epub │ [C.游戏编程].邹吉滔等.扫描版-.pdf │ [C.编程习题与解答(全美经典学习指导系列)].(美)Hubbard.扫描版-.pdf │ [Computer.Science.Programming.Basics.in.Ruby(2013.4)].Ophir.Frieder.文字版..epub │ [C安全编码标准].(美)塞克德.扫描版-.pdf │ [Dynamic.HTML权威指南].(Dynamic.HTML权威指南).Danny.Goodman.扫描版-.pdf │ [Excel.2013:The.Missing.Manual(2013.4)].Matthew.MacDonald.文字版..epub │ [HTML5.Canvas(2nd,2013.4)].Steve.Fulton.文字版..epub │ [JavaScript.for.PHP.Developers(2013.4)].Stoyan.Stefanov.文字版..epub │ [Kindle.Fire.HD:The.Missing.Manual(2nd,2013.1)].Peter.Meyers.文字版..epub │ [Kindle.Fire.HD:The.Missing.Manual(2nd,2013.1)].Peter.Meyers.文字版..pdf │ [Managing.Startups:Best.Blog.Posts(2013.5)].Thomas.Eisenmann.文字版..epub │ [Microinteractions(2013.4)].Dan.Saffer.文字版..epub │ [Microinteractions(2013.4)].Dan.Saffer.文字版..pdf │ [Microsoft.Project.2013:The.Missing.Manual(2013.4)].Bonnie.Biafore.文字版..epub │ [NOOK.HD:The.Missing.Manual(2nd,2013.2)].Preston.Gralla.文字版..epub │ [OPENGL编程指南].(美)Dave.Shreiner.扫描版-.pdf │ [PHP.Web.Services(2013.4)].Lorna.Jane.Mitchell.文字版..epub │ [Physics.for.Game.Developers(2nd,2013.4)].David.M.Bourg.文字版..epub │ [PowerBuilder基础类库技术详解].杨志鸿.扫描版-.pdf │ [Professional.C.(2nd.2011)].Marc.Gregoire.文字版-.epub
### 回答1: 要精通C语言并学习Java的路线,首先应该建立扎实的C语言基础。C语言是一门广泛应用于操作系统、嵌入式系统和系统软件等方面的高级编程语言,掌握了C语言的基本语法和特性后,将会对后续学习Java有很大的帮助。 接下来,可以在C语言的基础上学习数据结构和算法。数据结构和算法是计算机科学的核心内容,对于编写高效、可维护和可扩展的程序至关重要。通过掌握常见的数据结构如链表、树和图,以及一些基本的算法如排序和搜索,可以提高编程能力,并为学习Java的高级特性打下坚实基础。 在具备了C语言和数据结构算法的基础后,可以开始学习Java语言。由于C语言和Java都是面向过程的语言,它们之间存在一些相似之处,因此学习Java相对容易。可以先学习Java的基本语法、数据类型、流程控制语句等基础知识,然后逐步深入学习面向对象编程、异常处理、多线程编程等高级特性。 在学习Java的过程中,可以尝试编写一些小项目来巩固所学知识,并利用现有的框架和库进行开发实践。Java具有丰富的生态系统,有许多优秀的框架如Spring和Hibernate,以及常用的库如Apache Commons等,掌握它们可以提高开发效率。 最后,要善于查找和学习相关的文档和资料,积极参与社区讨论和交流,与其他程序员分享学习经验和解决问题的方法。多实践、多思考、多总结,不断提升自己的编程能力和项目经验,才能真正精通C语言并掌握Java编程。 ### 回答2: 要精通C语言并学习Java,首先需要了解C和Java的相似之处和不同之处。 C语言是一种低级编程语言,它具有直接访问计算机硬件的能力和强大的性能。学习C语言可以帮助我们深入理解计算机的底层原理,如内存管理、指针操作和位运算等。要精通C语言,可以通过阅读相关的书籍和教程,编写大量的C程序来增加实践经验。同时,了解C语言常用的编程技巧和标准库函数的使用也非常重要。 一旦掌握了C语言,学习Java会相对容易一些。Java是一种面向对象的高级编程语言,它拥有跨平台的特性和丰富的类库。学习Java,我们可以利用已有的类库来进行开发,同时Java的语法和结构也比较简单易懂。 为了学习Java,我们可以从Java的基础知识入手,学习Java的语法、数据类型、控制流程等基础概念。然后可以学习面向对象编程的概念和Java的类、对象、继承、多态等特性。学习Java还需要了解Java的异常处理机制、多线程编程、I/O操作等高级特性。 在学习Java的过程中,我们可以通过阅读Java相关的书籍、参加培训班或者参与开发项目来提升自己的实践能力。同时,多写Java程序来加深对Java知识的理解。 最后还需要强调的是,学习编程语言并不仅仅是了解语法,更重要的是进行实践。因此,建议在学习C和Java的过程中多进行编程训练和项目实战,通过不断地实践来提升编程能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值