以下废话只是要表达自己是个初学者,如果问了笨问题还请海涵
=====================================================================
大家好 先简述一下我程式语言菜鸟的历程
我接触程式语言是大学的课程,人生第一个程式是c
但是教授为了授课内容很快就跳c++(至少上课范例程式都直接存成cpp)
但可能是因为学店的关系吧,其实也没讲多少深入的东西
后来大三进入java的世界,然后深入学习java下的OO概念。
我其实不知道自己学到怎样的程度,只能说比较基本的没问题,
reflect以后的比较没在碰。
一个月前借了《c++全方位学习》回来摸索c++,最近才读到类别的章节
发现有些东西跟java的OO概念有点冲突,好不适应XDD 必须要放空去学习
=====================================================================
1.为何要赋予可实作成员函式于定义类别之外(想请问这个动作有术语吗)?
class CRectangle {
int x, y;
public:
void set_values (int,int);
int area (void) {
return (x*y);
}
}
void CRectangle::set_values (int a, int b) {
x = a;
y = b;
}
为什么成员函数不在定义类别的时候就决定好,而要在定义类别之外才补完?
是为了提供类似java OO的抽象函数的概念吗?
(例如定义一个类别叫做动物,动物会"移动",
但实际上怎么移动是由子类别去实作,所以
动物类别在移动这个成员函式就先不实作。
请问cpp有这个弹性的原因如上述吗?)
2.inline 好像很棒,默认为何不直接inline?
根据网络资料里头提到(大学课程的教材:C++物件导向及增进效率程式技巧)
在 class 内部直接定义完整的函数,和只定义函数的原型而把具体实现放在 class
外部的唯一区别在于,在第一种情况中,编译器(compiler) 会自动将函数作为
inline 考虑,而在第二种情况下,函数只是一般的 class 成员函数。
然后我又去查inline是什么东东,以我的了解是:
编译器会对加上inline的函式进行评估,
当展开函式内容比呼叫函式所花的成本还小时就会直接展开函式
而编译器也会评估,如果展开后的效益不够,即便函式加上inline
编译器也不会进行展开。
如果以上我的了解是正确的
那为何cpp不默认所有函式都是inline的作法?
反正展开的效益有编译器为我们把关来决定展开与否不是吗?
为什么会像现在这样要由使用者自己决定是否要加inline呢?