第一章 基础(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 小时前
C++ qt的安装
c++
小成2023032026512 小时前
C++~07补充
开发语言·c++
hold?fish:palm12 小时前
40 二叉树的直径
c++·leetcode
解决小子13 小时前
【虚幻引擎】【C++】【GAS框架】构建角色基类、属性集、数值钳制
c++·笔记·游戏引擎·虚幻·gas·能力系统
lunar_coder14 小时前
【C++】如何解决智能指针的析构函数,如何实现shared_ptr的引用计数以及解决shared_ptr的循环引用
c++·1024程序员节
白白白小纯14 小时前
C++进阶.多态
c++
凯瑟琳.奥古斯特15 小时前
力扣1016高效解法:剪枝优化技巧
开发语言·c++·算法·leetcode·职场和发展
xiangyun6116 小时前
C++ priority_queue 底层:手撕二叉堆与 Top K 问题
c++·算法·面试·stl·1024程序员节
坤坤子吖16 小时前
C++继承:友元、静态成员、多继承与组合
开发语言·c++·笔记·学习·1024程序员节
qz_Serene16 小时前
练习算法题:双指针 -cpp
c++·算法·leetcode·1024程序员节