传统编程和面向对象的差别
传统编程里没有object,只有function和data混搭

而面向对象编程则是把数据和功能整合到一个个object里
想法💭:在写过那么程序以后再回来看这个东西,我并不觉得面向对象编程一定比传统编程好,当object被继承了很多层以后那个程序虽然强大,但是最终还是难以理解和维护。所以万事没有绝对,最好的程序是既容易扩展,有容易理解和维护的,不应该拘泥于形式。
C++ 程序的结构
C++ 的程序是用source file和header file共同组成的。 他们会被编译器(Compiler)编译成Object file。然后再由linker把其他的module给编译进来,生成可执行文件(executable file)

想法💭:c++这个设定我觉得真是设计的超级恶心。再写了那么多年程序之后还是觉得这个过于麻烦。我承认c++的performance好,可每次改function都要改两个地方不然编译器就过不去真是浪费了程序员多少时间。这个恶心的点真是其他语言比不了的。现在有了AI还稍微好点,每次直接改.cc file以后让AI自动修改.h file让写c++舒服了些,可是和我写过的所有其他语言比起来,在这里骂两句我觉得不过分。
第一个C++小程序
onecompiler.com/cpp/43x8nz3...
cpp
#include <iostream>
using namespace std;
int main()
{
cout << "Enjoy yourself with C++!" << endl;
return 0;
}
一个c++程序里会有这些东西
- 对象(objects),在objects里又有
- 会员函数 (member functions),这个只有这个object能用
- 全局函数(global function)
- 一个特殊的全局函数main(),这个是所有程序的入口
上边的例子里有:
#include <iostream>
这行语句里用了#
开头,代表的是让预处理器(preprocessor)读的,加了#
之后,程序就可以读取在header flie里的信息了。
这里读了<iostream>
这个header file,里边包含可以处理input和output stream的模块。
小知识💡:stream这个词表示的是数据流(a flow of data)你可以把这个东西想象成一连串要处理的数据,有些时候再程序里我们需要些东西把数据串起来输入或者输出,这样程序比较容易理解。这个操作通常叫做pipe,在linux里也有同样的操作方式。
然后我们就把这几个东西串到了一起:
cout << "Enjoy yourself with C++!" << endl;
- cout:这个代表(console output)
- << : 这个是个操作,把后边的字符串(characters)给前边的(cout) ,然后这个东西可以串,给完一串之后再给一个endl
- **endl:**这个表示的时候end of line,也就是换行。
return 0;
为什么需要这个呢?因为我们的main的返回值是int,所以我们需要返回一个int。这个main int用来表示程序结束的状态,返回0就是说,程序成功的结束了。在这里我们先记住0表示正常结束就可以了。
具有多个functions的程序
例子 www.programiz.com/online-comp...
cpp
/******************************************************
A program with some functions and comments
******************************************************/
#include <iostream>
using namespace std;
void line(), message(); // Prototypes
int main() {
cout << "Hello! The program starts in main()." << endl;
line();
message();
line();
cout << "At the end of main()." << endl;
return 0;
}
void line() // To draw a line.
{
cout << "--------------------------------" << endl;
}
void message() // To display a message.
{
cout << "In function message()." << endl;
}
- 这个程序里定义了多个函数。
- 在这个程序里,先定义
message()
或者line()
都一样 - 然而,这些函数必须在main之前定义,因为在main里边call了这些函数。说明c++编译函数是顺着来的。如果在编译一个函数的时候,里边有个函数没见过,编译器直接报错。
💭
这个是c++无数槽点的中的一个...这种错误在别的语言中见都没见过,只此一家!
- 当然,我们可以用prototype的语句先提前定义下边的方程。这样,下边的函数就可以在定义前使用这些函数了。
这个例子里还有了注释。在c++里注释有两种方式:
- 用
//
做单行注释 - 用
/** */
做多行注释,比如说
cpp
/* I can cover
several lines */
小知识💡:Java之前受到了c++的启发,这个comment的格式和c++是一样的。然后java就用 /** */
东西发明了javadoc,而c++依然沿用古老的 //
来做函数注释。对于我这种什么语言都写的人来说,不同语言最终选择了不一样的规范真是一件让人很分裂的事情。