标题:[求助]关于学C++是否需要学习C
只看楼主
孤魂居士
Rank: 2
来 自:老A(中国地大)
等 级:论坛游民
威 望:4
帖 子:1142
专家分:18
注 册:2007-5-21
得分:0 

顶楼上斑竹的

准备用3年做个高级软件工程师 10年也做不成。准备用10年做成高级软件工程师 3年就成了QQ 群 45771086
欢迎版主...欢迎JAVA爱好者...
一起从深夜 到凌晨...
2007-06-18 14:41
xq0714
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2007-5-25
得分:0 
可有可无!只是一开始就学习OPP我觉得倒不会受些思想的束缚!
我是先学C的,但学C++时很少去写类还是当C来做!
改不了过程化语言的习惯啊 !总是觉得写了类不是多事一举吗?直接实现不就可以!
后来真正学习C++,才明白OPP的真谛!
2007-06-18 18:52
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
得分:0 
oop与语言无关,这是一种思想.用过程化语言写程序一样可以用oop的思想,只不过实现起来比较难.
C++或其它面向对象的语言只是作为实现这种思想工具.

/images/2011/147787/2011051411021524.jpg" border="0" />
2007-06-18 19:20
ichigo
Rank: 1
等 级:新手上路
帖 子:66
专家分:0
注 册:2007-5-27
得分:0 
以下是引用xq0714在2007-6-18 18:52:57的发言:
可有可无!只是一开始就学习OPP我觉得倒不会受些思想的束缚!
我是先学C的,但学C++时很少去写类还是当C来做!
改不了过程化语言的习惯啊 !总是觉得写了类不是多事一举吗?直接实现不就可以!
后来真正学习C++,才明白OPP的真谛!

我到没觉得多此一举,不过我也觉得不写类应该也可以实现

2007-06-18 23:08
龙飞
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2007-6-8
得分:0 

学了C,要再想转变思考方法,感觉挺难的,我现在学C++都不知道怎么突显C++的优点,感觉除了类以外,差不多都是用C的来做。。
但还是可以实现想要的功能。。
真不知道,面向过程和面向对象有什么区别。。。
有谁告诉下,C++的优点到底表现在哪些方面??


2007-06-19 00:13
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
得分:0 

如果你们没有真正做过稍微大一点的项目你们是很难以理解oo的思想的!

你们可知道为什么有了Microsoft Visual Studio 6.0而现在又出了个
Microsoft Visual Studio .net

或者你会说.net 的功能比 6.0的功能强大.

但你又知道是怎么样的强大法,体现在哪些方面.

或者你会说.net有强大的类库.强大的ide功能.

你可知道类库的本质是什么.

类库的本质就是实现了代码复用.

写类库不就是写类了.dll你应该知道吧.

我说个实例:
用结构或过程化的思想写以下代码:
//项目A
#include <iostream>

using namespace std;

void print();

int main()
{
print();
return 0;
}

void print()
{
cout<<"代码重用"<<endl;
}

好了.这是一个很简单的程序,过了些日子,我又接到了一个新的项目(项目B),然而这个项目有一个功能在上次那一个
项目A中实现过了的,现在你想到的要做的就是打开上一次那个项目A找到print()这段代码copy到项目B中相应的地方.好了,现在或者会反驳我,我这又不是代码重用了.是的,没错,是代码重用了.
好了,接着我发现在项目B中的print()功能要再加上一个cout的功能,好的,那么你就会想到在copy过来的地方再加上一句cout<<"XXX"<<endl;
好的,我知道你还没看出问题,因为例子实在太简单了, 但如果这个print()函数是有n行(n>10000)代码长度的情况问题就来了.首先你必须把这n行代码copy到项目B,第二在copy的过程中可能会出现copy少了几个字母(虽然机率很小,但确实存在),第三,当你要修改一个功能时你就得在这n行长的代码中寻找要修改的地方.第四增加了程序整体代码的长度,维护成本就会增加.第五,如果这个项目B不是你自己的,而是另一个公司接的,然而这个公司知道你有一段代码可以实现那个项目的一些功能,然后那公司向你购买实现那功能的代码.然而你只想让那公司用那代码实现某些功能就行了,不想让他们知道这功能的具体实现细节是什么,然而,你写的代码不可能做到这一点(只有给源码了).oo的一个特性--封装性,就可以做到这一点.就像我们在窗体拖放一个按钮时,我们是不知道实现那个按钮的代码是什么,就知道那个按钮有某些功能,如单击的功能...
然而,你的这个代码重用还有一个问题,就是只有你自己才知道你先前写的程序的某些代码可以在另一个程序重用,就算你说我会告诉别人的,我知道你会告诉别人的,你会说在某某个文件,第N行某某个函数,要copy某某.....

然而,像我们用c++的标准库时有人告诉我们在copy某某吗,只是有一个文档说明了功能的接口,我们不必到某某文件copy某某,只要包含这个头文件就行了.无论某个c++的标准库实现的代码长度有多长,然而都不会增加我们程序的代码长度,若是说有就那么一行 #include<XXX>

再用一个例子说明白一下代码重用吧,
代码仍然是项目A的代码:

//项目A
#include <iostream>

using namespace std;

void print();

int main()
{
print();
return 0;
}

void print()
{
cout<<"代码重用"<<endl;
}


/images/2011/147787/2011051411021524.jpg" border="0" />
2007-06-19 10:04
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
得分:0 

我们定义了一个函数就可以实现在多处调用,作用不外是有多处功能相同的地方不用写相现的实现代码,只调用一个定义好了的函数就得了,这是本程序内的代码重用,但我们想要的是任何人都可以很简单的在他们的程序里调用这个功能,就像我们用cout功能时,只要#include <iostream> 就行了.你就必须用C++提供的写类的手段去实现这样的事情.

软件工程强调的是什么?强调的是代码的重用性,可维护性.软件工程不外是围绕着这两个方面的问题!
自机器语言以来,各种语言从低级到高级的不断涌现,编程的方法从什么也不是到过程化到结构化到对象化.
这些转变不外是围绕着代码重用和软件的可维护性面展开的. 当你有一天自己写程序的时候,在不同的项目中
重覆地写着很多在经前项目中的代码,你就会知道代码重用的重要性了. 当过了n年时间的时候,客户要求
修改软件的时候你就知道维护性的重要了..软件工程中还强调软件的可扩展性,可移植性..

如果你真的想体会oo的与过程或结构化语言的区别,我建议你试着做个稍大些的项目.就算你现在还不会oo
,那么就用过程化或结构化的思想去做一个大项目,你一定会发现问题的所在.

我不认为从一开始就去接受oo的思想,应该从过程化的思想开始,古人云:吃一斩,长一智.
如果你不曾经历过过程化或结构化思想的局限性,就不能深刻地体会oo的优越性(个人观点)


/images/2011/147787/2011051411021524.jpg" border="0" />
2007-06-19 10:04
zkkpkk
Rank: 2
等 级:论坛游民
威 望:5
帖 子:489
专家分:28
注 册:2006-6-17
得分:0 
我们的老师教C++,前面的部分几乎是在教C,后面加入面向对象了也很自然

Viva,espana!
2007-06-19 13:28
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
得分:0 
以下是引用龙飞在2007-6-19 0:13:04的发言:

学了C,要再想转变思考方法,感觉挺难的,我现在学C++都不知道怎么突显C++的优点,感觉除了类以外,差不多都是用C的来做。。
但还是可以实现想要的功能。。
真不知道,面向过程和面向对象有什么区别。。。
有谁告诉下,C++的优点到底表现在哪些方面??

恰好我有个实例,不知道算不算哦!

早上在写 广度 和 深度 遍历图的的代码,因为之前的数据结构题目,比如写个什么树只类的,我用的都是基于类的,可以说是面向对象吧。这样也顺手的多,我学的c++,所以oo的思想很固化。
但是我今天就没用类,直接写了两个结构体,一个接点,一个封装数组的存储器,然后就用函数开始建图,然后广度,深度遍历。

写好了,实现了,问题也来了,用了这么多的new操作,怎么delete?
如果有对象这样概念,那太好了,在析够一个对象的时候就可以手动释放。
但是现在,main函数里就几个函数调用,new操作又是函数中的局部域,我实在是不知道怎么释放内存。
我又看了看机器上老师的代码,他是学c的,晕,他也没有释放,可能忘记了还是处于和我一样的原因,我就不知道了。


哪位大哥给我出个办法?怎么delete啊?


Fight  to win  or  die...
2007-06-19 14:19
zkkpkk
Rank: 2
等 级:论坛游民
威 望:5
帖 子:489
专家分:28
注 册:2006-6-17
得分:0 
回复:(aipb2007)以下是引用龙飞在2007-6-19 0:13:0...

C没有delete,C用的是free();函数,其实OO很难说清楚的,我也不知道是很清楚,就算清楚了也说不清楚,不过我觉得楼上版主的面向对象也还是不深,因为我和华科的老谢谈这个的时候他说得更悬,或许也是版主没表达出来?但是C有没有多态、有没有虚和抽象啊?


Viva,espana!
2007-06-19 16:02



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-147939-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.283785 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved