第一章 基础(Chapter 1 fundentals)

传统编程和面向对象的差别

传统编程里没有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++依然沿用古老的 // 来做函数注释。对于我这种什么语言都写的人来说,不同语言最终选择了不一样的规范真是一件让人很分裂的事情。


相关推荐
沐怡旸6 小时前
【底层机制】std::move 解决的痛点?是什么?如何实现?如何正确用?
c++·面试
tongsound1 天前
ros2 humble slam仿真环境搭建(turtlebot3 & Gazebo)
c++·docker
沐怡旸2 天前
【底层机制】std::weak_ptr解决的痛点?是什么?如何实现?如何正确用?
c++·面试
River4162 天前
Javer 学 c++(十六):对象特性篇(上)
c++·后端
感哥2 天前
C++ 左值、右值、左值引用、右值引用
c++
感哥2 天前
C++ 模板
c++
感哥2 天前
C++ 多重继承
c++
博笙困了2 天前
C++提高编程 4.0
c++
扑克中的黑桃A2 天前
[C语言]第三章-数据类型&变量
c++