t**g 发帖数: 1164 | 1 我想写一个函数f
返回值是N维空间的点坐标
比如有时返回3个一维空间的点坐标(所以每个点包含一个坐标值)
有时返回2个二维空间的点坐标(所以每个点包含2个坐标值)
我想设置这个函数返回值是一个指向array的指针p
(比如返回一个指向二维array的指针,这个array包含点坐标)
可是好像不太行得通
因为p可以指向二维array,也可以指向3维
而且array的size必须事先确定
可是size要到运行时才知道
所以有什么好的建议么?
thx |
|
c******t 发帖数: 391 | 2 在多次面试的online coding里都遇到这种情况,当实现一个返回值为int的搜索函数时
,有时会在if语句里判断是否符合搜索条件,如果符合即返回。但问题是,函数的
default返回值该怎样设,如果是搜索对象是数组下标,当然可以返回-1。但如果让返
回搜索的元素,该怎样解决呢?
举个例子,下面是一个用hashMap找数组里出现奇数次元素的代码(没测试):
public int findOdd(int[] arr){
HashMap map = new HashMap();
for(int i = 0; i
if(map.get(arr[i])==null)
map.put(arr[i],1);
else{
map.put(arr[i],map.get(arr[i])+1);
}
}
for(Map.Entry item... 阅读全帖 |
|
z****e 发帖数: 2024 | 3 我还不是太懂你的意思。
我也知道b的静态类型是Base*,但是这个和虚函数返回类型有什么联系呢?
难道,虚函数返回值的类型,不是决定于虚函数本身的签名么?
而是决定于调用该虚函数的指针的类型吗?
既然已经找到了derived的虚指针,查虚表,发现要返回一个derived*,就返回,这难道
有问题?
vptr并没有因为b的静态类型是Base*,而改变vptr本身的行为啊? |
|
a****n 发帖数: 1887 | 4 不同的编译器支持不一样, VC就不支持基于返回值重载
你把derived 的clone 返回值改成 base* 就行了 |
|
Y**G 发帖数: 1089 | 5 x86上return xxx就是将xxx放到寄存器EAX。调用者看EAX来获得函数的返回值。
如果没有return语句等于执行隐含的return语句,返回值无定义,是垃圾。 |
|
k*******3 发帖数: 1909 | 6 为啥前置++和后置++一个返回值一个返回引用呢? |
|
S**********e 发帖数: 503 | 7 "找数组里出现奇数次元素的代码"
不是应该返回一个数组或集合吗?出现奇数次元素可能不只一个。貌似函数的返回值定
义不恰当。要么抛出异常,如果找不到。 |
|
C*******l 发帖数: 105 | 8 C++中有些code把函数返回值定义成const,这样做的好处是什么?我的理解是函数返
回值已经是rvalue了,已经不能改变了,但为什么还要在函数定义时写上const,这是
不是多此一举? |
|
d******i 发帖数: 7160 | 9 至少vc对以下的烂函数很宽容,只是个编译期warning - "not all control paths
return a value"
int yy=0;
int test_func()
{
if(yy>0)
return 1;
}
而且奇怪的是它能正常运行,无疾而终。
int dd=test_func();
接受返回值的dd还是默认值,没受影响。
不理解啊。
求指点。谢谢! |
|
z****e 发帖数: 2024 | 10 "Now it is same as non virtual function overriding."
你这个又不太严格了啊。
convariant只有pointer和reference作返回值。 |
|
g***l 发帖数: 2753 | 11 像什么 pthread_mutex_wait()/post().
timer_start()/stop()..
我有时就加个自己定义的assert(), 并且在release版本中就都忽略了。
今年跟俺们这的一个架构师讨论一个问题,看看很多年以前别人的代码,架构师说这些
system Call也应检查返回值的。 |
|
|
d****n 发帖数: 1241 | 13 返回值优化(RVO)通常指带的是在C++编译器里的一种优化吧?在C编译器里好像没有类
似的优化. |
|
K*******i 发帖数: 399 | 14 某本数据结构英文教材上说Top方法是accessor, 返回值的时候栈中还有这个值,因此
可以返回const引用。Pop方法可以没有返回值,但带返回值的Pop方法不允许返回引用
,因为Pop后这个值逻辑上在栈中被删除了。
假如Top和Pop方法的原型是
template
const T& Top() const;
void Pop();
问题是Top方法返回引用也有问题:
如果调用者这样写
T t = S.Top();
这个问题不大,因为是赋值给t
但如果调用者这样写
const T& t = S.Top();
S.Pop();
这样一来,再使用t不就有问题了么? |
|
P*****i 发帖数: 63 | 15 按照SAS手册定义,substr返回值不应该是一个子字符串,长度就是该子字符的长度吗?
SYNTAX
The SUBSTR function has three arguments:
SUBSTR(SOURCE, POSITION, N)
The function returns N characters, beginning at character number
POSITION from the string SOURCE.
SOURCE—This is the larger or reference string. It can be a
variable or a string of characters.
POSITION—This value is a positive integer and references the
starting point to begin reading the internal group of characters.
N—This value is a positive integer and references the number... 阅读全帖 |
|
s**l 发帖数: 46 | 16 不是学计算机的,是搞生物的,但是现在要用一些计算机的东西
有一个函数ZL(int t), 不同的t能返回不同的值,现在知道t取值从a到b, 怎么样才
能最快的找到其中那一个t能让ZL函数返回值最小。 ZL函数不是单调的。 |
|
k*******3 发帖数: 1909 | 17 essential C++ 中文版4.6节“打造一个iterator class”中分别定义了++的前置和后
置版
本,请问为啥一个返回Triangular_iterator&,而一个返回Triangular_iterator类呢?
谢谢。
inline Triangular_iterator& Triangular_iterator::
operator++()
{ // prefix instance
++_index;
check_integrity();
return *this;
}
inline Triangular_iterator Triangular_iterator::
operator++( int )
{ // postfix instance
Triangular_iterator tmp = *this;
++_index;
check_integrity();
return tmp;
} |
|
p**o 发帖数: 3409 | 18 手写了一些C扩展,有些返回多重指针的函数不知道怎么用SWIG来包来供Python调用……
比如下面这个strsplit()函数,返回的是char**,怎么改才能让Python收到一个list (
of strings)?
http://www.swig.org/tutorial.html
我只是照tutorial简单地把函数声明抄进.i文件,Python中调用时返回的是
#include
#include
#include
/* Split an input string 'instr', using a set of given delimiters, to an
array of strings of at most 'maxparts' parts. */
char **strsplit (const char *instr, const char *delimiters, size_t maxparts)
{
char *... 阅读全帖 |
|
b***i 发帖数: 3043 | 19 是java,如果原来的代码是c++, 就是我写的那样,可以用引用或者指针获得地址,从而
给变量赋值。现在要转换成java,如何写呢?
C++程序如下
我有一个类叫storage,其中有个数组double ok[100];
还有个方法acquirereference(int a)想返回ok[a]的引用,比如我在主程序中
storage m;
double& storage::acquirereference(int a)
{
return ok[a];
}
double& myvalue=m.acquirereference(10);// here to get &ok[10] as in c++
myvalue=5;可以让ok[10]获得5。
应该怎样写java的方法acquirereference的返回值类型和return 的参数呢? |
|
A*******i 发帖数: 75 | 20 例如用命令 grep 'abc' *.* | wc -l
想把wc的结果存到一个变量中
试着用grep 'abc' *.* | wc -l | read var1
但是var1里面没有值,现在暂时办法就是先把值存到一个临时文件里面,然后再读文件
里面的值。
在tcsh里面用set就可以做到,可是bash中好像不行,请问有直接的方法吗?谢谢 |
|
p**i 发帖数: 688 | 21 have you tried
var1=`grep 'abc' *.* | wc -l`
echo $var1
例如用命令 grep 'abc' *.* | wc -l
想把wc的结果存到一个变量中
试着用grep 'abc' *.* | wc -l | read var1
但是var1里面没有值,现在暂时办法就是先把值存到一个临时文件里面,然后再读文件
里面的值。
在tcsh里面用set就可以做到,可是bash中好像不行,请问有直接的方法吗?谢谢 |
|
s**l 发帖数: 46 | 22 对,我也是这样想的
实际上ZL函数是一个预测算法,其返回值是预测误差.这个误差和ZL的输入参数t关系
特别大.现在就是想找一个合适的t使得ZL输出误差小于某一个设定值.只知道 t的取
值范围,所以不知道怎么搞. |
|
|
c******t 发帖数: 391 | 24 多谢回复!
但返回null会报错啊(Type mismatch: cannot convert from null to int),除非cast
成(int)null,感觉很奇怪。。。 |
|
X****r 发帖数: 3557 | 25 没有本质上的区别,但在大部分情况下我个人倾向于使用指针,有两个原因:
1.这个参数将会被改变这个事实在调用的地点看起来更清楚。特别是多人合作开发的项
目里代码好多都是贴来贴去的,不是每人都会看一下所有用到的函数的文档的。
2.有时候调用者不关心这个参数的返回值,这样可以传一个空指针。
当然也有时候用引用更恰当或更符合周围代码的风格的。 |
|
X****r 发帖数: 3557 | 26 b->clone()返回Base*,你要赋给Derived*,自然报错,
用dynamic_cast |
|
X****r 发帖数: 3557 | 27 b的静态类型是Base*,b->clone()所返回的静态类型就是Base*,
虽然在你这里它的动态类型是Derived*。
所以不能直接赋值给Derived*变量而要用dynamic_cast。 |
|
X****r 发帖数: 3557 | 28 你说什么呢。现在是编译错误,和什么vptr都没关系。Base::clone()
声明的返回类型是Base*,所以b->clone()这个表达式的类型就是Base*。 |
|
c*********l 发帖数: 3438 | 29 【 以下文字转载自 CS 讨论区 】
发信人: amrita (Amrita), 信区: CS
标 题: [分享]:一篇文章讲通一半Java《面向对象一家人》
发信站: BBS 未名空间站 (Thu Oct 24 04:15:04 2013, 美东)
原文链接:http://ladder.azurewebsites.net/forum.php?mod=viewthread&tid=121&extra=page%3D1
第一集:Mr.Method
Hi,大家好~~我是Mr.Method,和Mr. Okay是好哥们儿。
在所有面向对象的语言里你都能见到我的身影。不信?你们学编程的时候第一个程序
都是Hello World吧?那就是依靠对我的调用实现的——无论是哪个平台、哪种语言,
你一定调用了在命令行里输出字符串的某个Method。
铁三角
在正式介绍我自己之前,还是先说说我的哥哥和妹妹吧,我们的家庭背景有助于大家
对我有一个更好的了解。我的哥哥(Mr. Class)和小妹(Mr. Field)加上我,我们仨
可是面向对象家庭里绝对的主角、“铁三角”。我们三个之所以称为“铁三角”是因为
... 阅读全帖 |
|
a****a 发帖数: 67 | 30 原文链接:http://ladder.azurewebsites.net/forum.php?mod=viewthread&tid=121&extra=page%3D1
第一集:Mr.Method
Hi,大家好~~我是Mr.Method,和Mr. Okay是好哥们儿。
在所有面向对象的语言里你都能见到我的身影。不信?你们学编程的时候第一个程序
都是Hello World吧?那就是依靠对我的调用实现的——无论是哪个平台、哪种语言,
你一定调用了在命令行里输出字符串的某个Method。
铁三角
在正式介绍我自己之前,还是先说说我的哥哥和妹妹吧,我们的家庭背景有助于大家
对我有一个更好的了解。我的哥哥(Mr. Class)和小妹(Mr. Field)加上我,我们仨
可是面向对象家庭里绝对的主角、“铁三角”。我们三个之所以称为“铁三角”是因为
我们各司其职、配合的非常默契。Mr.Class,他是个很好的组织者,他能把从现实世界
抽象出来的结果良好地组织在一起(这个叫“封装”)——我(Mr.Method)和我小妹
(Ms. Field)被我哥管着(注:被封装在类里)。小妹负责表示我们这个小组织当... 阅读全帖 |
|
a****a 发帖数: 67 | 31 原文链接:http://ladder.azurewebsites.net/forum.php?mod=viewthread&tid=121&extra=page%3D1
第一集:Mr.Method
Hi,大家好~~我是Mr.Method,和Mr. Okay是好哥们儿。
在所有面向对象的语言里你都能见到我的身影。不信?你们学编程的时候第一个程序
都是Hello World吧?那就是依靠对我的调用实现的——无论是哪个平台、哪种语言,
你一定调用了在命令行里输出字符串的某个Method。
铁三角
在正式介绍我自己之前,还是先说说我的哥哥和妹妹吧,我们的家庭背景有助于大家
对我有一个更好的了解。我的哥哥(Mr. Class)和小妹(Mr. Field)加上我,我们仨
可是面向对象家庭里绝对的主角、“铁三角”。我们三个之所以称为“铁三角”是因为
我们各司其职、配合的非常默契。Mr.Class,他是个很好的组织者,他能把从现实世界
抽象出来的结果良好地组织在一起(这个叫“封装”)——我(Mr.Method)和我小妹
(Ms. Field)被我哥管着(注:被封装在类里)。小妹负责表示我们这个小组织当... 阅读全帖 |
|
a****a 发帖数: 67 | 32 原文连接:http://ladder.azurewebsites.net/forum.php?mod=viewthread&tid=121&extra=page%3D1
第一集:Mr.Method
Hi,大家好~~我是Mr.Method,和Mr. Okay是好哥们儿。
在所有面向对象的语言里你都能见到我的身影。不信?你们学编程的时候第一个程序
都是Hello World吧?那就是依靠对我的调用实现的——无论是哪个平台、哪种语言,
你一定调用了在命令行里输出字符串的某个Method。
铁三角
在正式介绍我自己之前,还是先说说我的哥哥和妹妹吧,我们的家庭背景有助于大家
对我有一个更好的了解。我的哥哥(Mr. Class)和小妹(Mr. Field)加上我,我们仨
可是面向对象家庭里绝对的主角、“铁三角”。我们三个之所以称为“铁三角”是因为
我们各司其职、配合的非常默契。Mr.Class,他是个很好的组织者,他能把从现实世界
抽象出来的结果良好地组织在一起(这个叫“封装”)——我(Mr.Method)和我小妹
(Ms. Field)被我哥管着(注:被封装在类里)。小妹负责表示我们这个小组织当... 阅读全帖 |
|
a****a 发帖数: 67 | 33 原文:http://ladder.azurewebsites.net/forum.php?mod=viewthread&tid=121&extra=page%3D1
第一集:Mr.Method
Hi,大家好~~我是Mr.Method,和Mr. Okay是好哥们儿。
在所有面向对象的语言里你都能见到我的身影。不信?你们学编程的时候第一个程序
都是Hello World吧?那就是依靠对我的调用实现的——无论是哪个平台、哪种语言,
你一定调用了在命令行里输出字符串的某个Method。
铁三角
在正式介绍我自己之前,还是先说说我的哥哥和妹妹吧,我们的家庭背景有助于大家
对我有一个更好的了解。我的哥哥(Mr. Class)和小妹(Mr. Field)加上我,我们仨
可是面向对象家庭里绝对的主角、“铁三角”。我们三个之所以称为“铁三角”是因为
我们各司其职、配合的非常默契。Mr.Class,他是个很好的组织者,他能把从现实世界
抽象出来的结果良好地组织在一起(这个叫“封装”)——我(Mr.Method)和我小妹
(Ms. Field)被我哥管着(注:被封装在类里)。小妹负责表示我们这个小组织当前
... 阅读全帖 |
|
S**I 发帖数: 15689 | 34 ☆─────────────────────────────────────☆
Bayesian1 (Jason) 于 (Tue Jun 21 01:52:31 2011, 美东) 提到:
Given a binary tree, find 2 leaf nodes say X and Y such that F(X,Y) is
maximum where F(X,Y) = sum of nodes in the path from root to X + sum of
nodes in the path from root to Y - sum of nodes in the common path from root
to first common ancestor of the Nodes X and Y
☆─────────────────────────────────────☆
SecretVest (Secret Vest) 于 (Tue Jun 21 04:01:30 2011, 美东) 提到:
not hard if someone is used... 阅读全帖 |
|
l**n 发帖数: 7272 | 35 虽然这里的码工比较少,但是能appreciate coding和programming的朋友也可以看看。
我觉得挺有意思的。
http://blog.sina.com.cn/s/blog_5d90e82f01014k5j.html
我想通过这篇文章解释一下我对 Unix 哲学本质的理解。我虽然指出 Unix 的一个设计
问题,但目的并不是打击人们对 Unix 的兴趣。虽然 Unix 在基础概念上有一个挺严重
的问题,但是经过多年的发展之后,这个问题恐怕已经被各种别的因素所弥补(比如大
量的人力)。但是如果开始正视这个问题,我们也许就可以缓慢的改善系统的结构,从
而使得它用起来更加高效,方便和安全,那又未尝不可。同时也希望这里对 Unix 命令
本质的阐述能帮助人迅速的掌握 Unix,灵活的应用它的潜力,避免它的缺点。
通常所说的“Unix哲学”包括以下三条原则[Mcllroy]:
一个程序只做一件事情,并且把它做好。
程序之间能够协同工作。
程序处理文本流,因为它是一个通用的接口。
这三条原则当中,前两条其实早于 Unix 就已经存在,它们描述的其实是程序设计最... 阅读全帖 |
|
c**y 发帖数: 73 | 36 1. 大数乘法
给定两个非常大的数,写出一个函数返回它们的乘积。可以自己定义需要用到的数据结
构来表示每个数。我用了vector。
2. 系统设计的问题。
给定一个数据中心,如何收集statistics在给定的时间范围(t0,t1)。
这是系统设计题,没啥代表性。
3. 给定一个点,找出一百万个点中距离这个点最近的k个点。
用heap来存当前最近的k个点,然后scan这一百万个点一遍。
4. 给定一个函数fetch10k(),要求实现另外一个函数fetch()。这个题的说明比较复杂
,最后没有写完。具体说明如下。
fetch10k()是给定的,signature如下。
int fetch10k(char *buffer)
这个函数干的事情是从底层读出数据,写到传入的buffer中。这个buffer是一个默认
10k bytes大小的空buffer。返回类型int,返回写入后buffer中数据的size。
注意返回的数据大小和底层的数据大小有关。如果底层数据size是0,那么返回也是0,
因为buffer里什么也没有写。
如果底层数据是小于10k,例如5k,那么返回值是5k,因为只有5k... 阅读全帖 |
|
s******g 发帖数: 755 | 37 【 以下文字转载自 Apple 讨论区 】
发信人: faucetQ (fq), 信区: Apple
标 题: [Mac Dev]整了个ObjectiveC的笔记,看看气氛对得上不
发信站: BBS 未名空间站 (Mon Feb 2 21:38:18 2009), 转信
整了个类似ObjectiveC学习笔记的东西,发上来大伙看看有兴趣不。
修改了一点,增加了NSAutoreleasePool的内容。
增加了NSString内容。
===========俺系分隔线==================
本文假设读者有基本的C编程能力,如果有C++或者Java的背景会更容易理解但是不是必须。
ObjectiveC基本语法
消息
在objectiveC中,向一个对象发送一个消息的语法为
[ obj method:parameter];
类似的功能在C++中写作
obj->method(parameter);
在java中写作
obj.method(parameter);
在smalltalk中写作
obj method:parameter
显而易见objectiveC和smalltalk... 阅读全帖 |
|
f*****Q 发帖数: 1912 | 38 整了个类似ObjectiveC学习笔记的东西,发上来大伙看看有兴趣不。
修改了一点,增加了NSAutoreleasePool的内容。
增加了NSString内容。
===========俺系分隔线==================
本文假设读者有基本的C编程能力,如果有C++或者Java的背景会更容易理解但是不是必须。
ObjectiveC基本语法
消息
在objectiveC中,向一个对象发送一个消息的语法为
[ obj method:parameter];
类似的功能在C++中写作
obj->method(parameter);
在java中写作
obj.method(parameter);
在smalltalk中写作
obj method:parameter
显而易见objectiveC和smalltalk的语法基本是相同的。
当有两个或者两个以上的参数时,通常试用以的语法
[ obj method:parameter1 WithSecondParameter:parameter2];
定义一个类的代码放在一个.h文件中,下面是一个例子。
//macdevexample1.h
... 阅读全帖 |
|
d**s 发帖数: 98 | 39 非常规的解法:
http://blog.csdn.net/anchor89/article/details/6055412
经典面试题:设计包含min函数的栈,O(1)空间实现方法
分类: 数据结构和算法 2010-12-04 22:20 2102人阅读 评论(10) 收藏 举报
题目:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数
min、push以及pop的时间复杂度都是O(1)。
注:这是06年一道Google的面试题.
先来说个常规解和他的一个优化,常规解的时间复杂度符合要求,但需要线性的额外空间.
常规解(参考 http://zhedahht.blog.163.com/blog/static/25411174200712895228171/):
除了题目要求的栈之外新开一个栈,用来记录最小值,每当在原栈中push数据后,与最小
值栈中的栈顶元素比较,如果新值较小,则在最小值栈中push新值;否则再次push栈顶元
素.
pop的时候,只要将最小值栈也pop一下就行了.
这样,min函数只需要返回最小值栈的栈顶元素即可.
常规解空间上的一个优化:
一般... 阅读全帖 |
|
B**********2 发帖数: 923 | 40 首先感谢microleo,给我推荐
电话两轮,一个聊天,一个简单的电面。
Coding Test 一轮,题目为Spread Sheet,大家可以自行Google
得到Positive Feedback
5月8号 On site
分别两个工程师两个项目经理
鉴于每个人多聊了一会我以前的Project,所以每个人问1到3个问题不等。
----------------- 割割割割割割割割 -----------------------------
Q: Spread Sheet 如果太大,不能整个Load进内存来处理。但是可以有多个
机器按照一定的信息读本机文件。假设Spread Sheet每个连通片的计算量
一个机器能够处理
A: Virtually的建立无向连通图,用DFS获得连通片,每个连通片交给一个主机来计算
----------------- 割割割割割割割割 -----------------------------
Q: 给一个森林和已知两个节点,求最近公共祖先,如果没有,返回NULL
A: 我说啥语言没有什么区别,先上伪码,MIT Press Algorithm ... 阅读全帖 |
|
d******e 发帖数: 2265 | 41 转帖:
克里斯可以说是天才少年和好学生的代名词,他在2000年本科毕业之后,继续攻读计算
机硕士和博士。但克里斯并不是宅男,学习之余他手捧「龙书」游历世界,成为德智体
美劳全面发展的好学生。之后就是一篇又一篇的发表论文,硕士毕业论文即提出了一套
完整的运行时编译思想,奠定了 LLVM 的发展基础,读博期间 LLVM 编译框架在他的领
导下得到了长足的发展,已经可以基于 GCC 前端编译器的语义分析结果进行编译优化
和代码生成,所以克里斯在2005年毕业的时候已经是业界知名的编译器专家了。
注:很多计算机专业的大学生经常问我在大学里学点什么好,看看克里斯就行了。以目
前的科技信息开放程度,如果你在自己感兴趣的领域里用心耕耘,再加上那么一点点天
分,毕业时成为某一个专有领域的专家应该不是问题。那时就不是你满世界去找工作了
,而是工作满世界来找你!
克里斯毕业的时候正是苹果为了编译器焦头烂额的时候,因为苹果之前的软件产品都依
赖于整条 GCC 编译链,而开源界的这帮大爷并不买苹果的帐,他们不愿意专门为了苹
果公司的要求优化和改进 GCC 代码,所以苹果一怒之下将编译器后端直接替换为 LLVM... 阅读全帖 |
|
|
|
b***i 发帖数: 3043 | 44 Exception不是给你处理编程错误的。指针非法操作是编程错误,最终会在发行版消失
的,或者变少。而exception是预计要发生的异常。Exception的目的是,在出问题的时
候,无法给出函数返回值的时候,提供一个另外的返回方式和返回值.
比如,计算开方。参数为负,算不出来开方,而函数的返回值是double,怎么办?扔出
一个Exception。这样被最近的catch接到,从而不走正常的返回通道。这种情况下,本
来正常通道就凑不通。这样简化了函数调用都要通过某个参数(指针所指向的结构)判
断一个任务是否完成。本来都要进行if, else if这样。改成try catch 就清晰了。方
便在你可以越级返回,即不在本次调用进行catch,而是在外层catch,比如一个类有很
多子类,就不用在每个子类实现的续函数中catch,而是在呼叫这些虚函数的那个函数
里面catch。
try{
p->virtualfun();
}catch(MyException e){
// no need to implement the catch in different virtualfu... 阅读全帖 |
|
G***l 发帖数: 355 | 45 基本概念。纸上画画stack。
比如一个递归函数
factorial(n):
if n == 1:
return 1
else:
return n*factorial(n-1)
在main里调用
int param = 2
result = factorial(param)
程序会产生stack结构:
stack of main
------------------------
stack main:param=2
调用factorial(2),进入stack of f(2)
------------------------
|stack f2:n=2
|n不等于1执行n*f(1),进入stack of f(1)
| ------------------------
| |stack f1:n=1
| |stack f1:a_const_variable=1
| |... 阅读全帖 |
|
h*h 发帖数: 27852 | 46 http://www.yinwang.org/blog-cn/2015/04/03/paradigms
编程的宗派
总是有人喜欢争论这类问题,到底是“函数式编程”(FP)好,还是“面向对象编程”
(OOP)好。既然出了两个帮派,就有人积极地做它们的帮众,互相唾骂和鄙视。然后
呢又出了一个“好好先生帮”,这个帮的人喜欢说,管它什么范式呢,能解决问题的工
具就是好工具!我个人其实不属于这三帮人中的任何一个。
面向对象编程(Object-Oriented Programming)
如果你看透了表面现象就会发现,其实“面向对象编程”本身没有引入很多新东西。所
谓“面向对象语言”,其实就是经典的“过程式语言”(比如Pascal),加上一点抽象
能力。所谓“类”和“对象”,基本是过程式语言里面的记录(record,或者叫结构,
structure),它本质其实是一个从名字到数据的“映射表”(map)。你可以用名字从
这个表里面提取相应的数据。比如point.x,就是用名字x从记录point里面提取相应的
数据。这比起数组来是一件很方便的事情,因为你不需要记住存放数据的下标。即使你
插入了新的数据成... 阅读全帖 |
|
p*u 发帖数: 2454 | 47 来自主题: Programming版 - 编程的宗派 总是有人喜欢争论这类问题,到底是“函数式编程”(FP)好,还是“面向对象编程”
(OOP)好。既然现在出了两个帮派,就有人积极地做它们的帮众,互相唾骂和残杀。
然后呢,又出了一个“好好先生帮”,这个帮的人喜欢说,管它什么范式呢,能解决问
题的工具就是好工具!
我个人其实不属于这三帮人中的任何一个。
面向对象编程(Object-Oriented Programming)
如果你看透了表面现象就会发现,其实“面向对象编程”本身没有引入很多新东西。所
谓“面向对象语言”,其实就是经典的“过程式语言”(比如Pascal),加上一点点抽
象能力。所谓“类”和“对象”,基本是过程式语言里面的记录(record,或者叫结构
,structure),它的本质就是一个从名字到数据的“映射表”(map)。你可以用名字
从这个表里面提取相应的数据。比如point.x,就是用名字'x'从记录point里面提取相
应的数据。这比起数组来是一件很方便的事情,因为你不需要记住存放数据的下标。即
使你插入了新的数据成员,仍然可以用原来的名字来访问已有的数据,而不用担心下标
错位的问题。
所谓“对象思想”(区别于“面向... 阅读全帖 |
|
f*****Q 发帖数: 1912 | 48 首先最好能在标题或者帖子开头说明是C++,首先声明俺很久不用C++了,不一定说的对
,抛砖引玉。
1,看不懂。
2,函数可以是private,protected或者public。变量也可以是private, protected或
者public。实例变量好像不能在这里定义吧?
3,不能访问同类对象的private part。friend可以访问其他类对象的private part。
子类可以访问父类(不确定是不是这么叫)的protected部分,但是private不行。
4,构造函数没有返回值。没返回值不写void俺不太确定,俺记着没返回值的函数的缺
省返回值是int,不是void。
5,你说的初始化式大概是
classA::ClassA():variableA(0),variableB(4+someOutsideVariable){
...
}
中
variableA(0),variableB(4+someOutsideVariable)这一部分。
俺记着C++里面类实例变量是不可以在声明的时候直接赋值的。
6,其他的实例变量里面的constant可以在类初始化的时候赋值。
7,看不 |
|
C********a 发帖数: 10 | 49 如果有一个recursive call 在终结的时候返回一个表达式的值 怎样才能把这个结果一
层层传递出去?
比如这个找in order tree最小值的方法:
public treeNode treeMinimumRecursive(treeNode root){
if (root.left=NULL)
return root;
else
treeMinimumRecursive(treeNode root.left);
}
开始做条件判断,treeNode.left 不为空就一直调用自己, 直到为空以后返回当前的
treeNode。
然后上一层拿到这个返回值,怎么才能把它作为自己的返回值再传给上层的函数?
网上看的似乎是把最后一行前加return 改成 return treeMinimumRecursive(treeNode
root.left);
这个return的是一个方法 而不是一个表达式 这种情况有定义吗
门外汉刚开始看 请各位拍砖 |
|
d*******l 发帖数: 338 | 50 我不敢说完全明白,但有点感觉,谈谈我得想法。
就像上面说的,为了保证能返回一个对齐的地址且有足够的空间,需要打出一些富裕。
多少富裕足够呢?就是代码里的offset。我记得在OS课上老师提到过这种做法,好像叫
container,就是比实际需要多分配空间,把中间开始的某个地址返回,前面的地方存
放些信息。
下面说说offset怎么来的。假设我们用malloc分配了一段空间,起始地址是p1。此时我
们想得到一个对齐的地址,最直接的做法就是& ~(alignment-1),这样低位清0,结果
就是对齐的。但这样做的结果相当于把原地址减去了一个[0, alignment-1]的数,也就
是低位被减掉了。得到的新地址的开始的一部分就是未分配的。代码中对p2进行这个操
作,得到的结果是p2=p1+offset-x,x就是在对齐过程中被减掉的数,可以看出p2>=p1+
1,这就保证了对齐之后的地址也是分配过的。
再说说p2[-1]=p1的作用。上面说的container方法有一个需要注意的就是free的时候,
如果直接free alloc返回的那个地址,其实是有问题的,因为那个是最初分配空间的中
... 阅读全帖 |
|