零基础同事学习C++自学一个月与java上课半个月之后的一些总结
Posted deemohans
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了零基础同事学习C++自学一个月与java上课半个月之后的一些总结相关的知识,希望对你有一定的参考价值。
C++与java在语法上是相似的
输出语句C++: cout<<
输出语句java:System.out.print()
两者相比之下C++的更为简洁,虽然java可以使用sout来快捷补完输出语句但是在读取时依然臃肿。
输入语句C++:cin>> or getline(cin,内容)
输入语句java:Scanner input=new Scanner(System.in)//创建输入对象而后对变量进行赋值
两者相比C++不管使用哪种方式都是优于java的,首先java在编写代码时目前并没有找到可以通过一行代码来进行多个输入操作的情况
每次使用都需要用多条语句来应对多次的连贯输入,比如C++输入姓名、年龄、性别的等可使用:
cin>>name>>age>>gender;这样的一句来进行一条语句多次赋值
而java中需要:
首先需要创建输出对象Scanner
然后对对象进行逐条赋值,并且需要根据所村粗的数据类型来判断
name=input.next();
age=input.nextInt();
gender=input.next().charAt(0);
两者相比java依旧是体现出了代码量增加的情况,(可能是由于java作为完全面向对象语言的特性,对此表示不理解,但不管是C++还是JAVA这里应该都是使用了前辈牛人所留下的便利条件)
以上是输入输出对象的基本对比,谈不到理解只能说可以使用。
数据类型
C++ int shortint longint longlong float double longdouble char bool(由于没有真正经历过什么项目或者实践。对于宽字符型和只取正数部分的的数据类型不太了解具体的使用方式)
java八大基本数据类型 byte int short long float double char boolean
两者对比看起来区别不是太大,我个人理解的有以下几点
首先最简单的bool类型,在C++中是以整形存放,可以很方便的转换为1和0来,而java中作为一个单独的类型存放,虽然也可以用1和0表示但bool类型的数据在java中并不能直接转换。
因此就bool类型来看C++稍微灵活一些。
其次是长整形部分,虽然目前本人所接触的所有数据都足以用int应付,但是应该对庞大数据的处理情况,C++提供了longlong类型,是范围比java的村粗范围更宽。
其他的部分由于byte没有接触不太了解,c++与java中float个人基本都是用double替代,目前暂不明会这两者在效率上产生的差异,只是感觉double使用起来更方便。
*float和double标准写法:1.1f,1.2d。一般来讲省略默认为double。
特殊类型string:
就目前的学习来看不管在C++中还是java中string字符串型都是一个特殊的类型。这个类型的基础是char类型的字符数组。
因此在java中和C++中都可以对其单个的元素进行提取等操作
c++并没有学习到关于字符串的操作,个人猜测可能是因为在c++中string被前人所搭建的更加完善
在JAVA中string的S需要大写而C++中则与其他的基本类型一样即可
c++中操作字符串需要导入#include<string>
java中则不需要导入,因为他存在于java.util.*基础包当中,java中基础包的内容是不需要手动导入而被默认导入的
但是C++如果需要使用这些功能都需要导入头文件以及调用命名空间。(PS:命名空间的部分并不理解,虽然每次都调用STD但是并不知道其内部结构)
三种控制结构上if switch for,两者使用的时候几乎没有感觉到区别。
关于函数:
函数是C++中的说法,也就是java中的方法。
C++中函数可以单独存在,甚至可以单独创建模板函数来方便调用
定义:template<typname T&>void swap<t&,t&>
函数模板由模板定义和函数定义组成,函数模板和函数声明是在一起的,通常写在一行,一般以T来代替数据类型
说明:template//声明这是一个模板
typname//类型的名称
T&//类型的参数
模板函数的作用,在定义变量时和函数实现是需使用引用。
个人理解部分:引用在C++中视为引用被引用对象的本体。模板函数是对被引用本体的数据类型自判断。
函数重载部分
函数重载内容不多,个人理解为是编译器以类似函数名+数据类型+数据类型。。。。的方式进行重命名
例:void func(string)与void func(int)编译器重命名为类似func_string与func_int,因此不能也导致了函数重载中不能存在两个同名且参数相同的函数
***********************************************************************************************************************************************************************************************
OOP部分
类和对象
C++中的函数对应的是类和对象中的方法部分。
之后统称为方法
类是由属性+方法构成的。
属性是对象所具有的静态的特征,方法则是对象的可操作的行为。
类是一个抽象的(此处并不是指抽象类,这里的抽象指的是模糊而不是‘抽’‘象’)
对象则是类的实例,也就是一个清晰的个体。
创建类的区别在创建上
java需要用类名对象名(变量名)=new 类名();
c++中有两种方式(均需要导入头文件,且因为是自定义的头文件因此需要“”来引导而不是官方的<>)
方法1:类型名 对象名;
(个人理解:用此方法创建的对象是在栈区的。)
方法2:类型名*(类型名指针) 对象名=new 类型名;
首先new的意思是动态分配内存,这个时候所产生的对象分配在堆区
这里的区别是java在jvm上运行,由于是虚拟机因此是十分安全的,并且java有内存自动的回收机制,虽然个人并不太理解。
C++使用new分配的内存需要手动释放。因此使用new的时候一定要搭配delete删除。如果不删除会导致内存溢出的风险
这在java中并不会出现,但是由于不删除就一直存在的特点在某些情况下会更加灵活。
访问修饰符:
public 公共的 所有人可以访问
private 私有的 本类可以访问
protected 保护的 本包以及子类可以访问
友元 这个在java中不写的话默认为这个访问修饰符,本包内的都可以访问,而C++中默认是私有的
虽然c++中有友元,但是本人还没有学习到日后在记录。
创建属性:
java中目前需要在每个属性前都加访问修饰符
c++中只需要访问修饰符:即可默认下面区域中为同一类访问修饰符
创建方法:
java作为完全面向对象语言,直接在类中实现即可
C++的类只作为定义属性以及方法,方法在类中并不实现而是在其他CPP文件中实现
这里会遇到的问题是如果类定义的属性是私有的,在其他CPP文件中实现时需要用其他的办法暴露出来才可使用。
(个人理解部分:C++中存在inline函数。如果在类中直接实现函数namename调用时就会成为inline函数,inline函数相当于编译时直接复制这段代码到函数调用处虽然可以实现,但是长代码的效率并不高)
暂时写到这里
以上是关于零基础同事学习C++自学一个月与java上课半个月之后的一些总结的主要内容,如果未能解决你的问题,请参考以下文章