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


相关推荐
scx2013100410 分钟前
20260105 莫队总结
c++
Q741_14739 分钟前
海致星图招聘 数据库内核研发实习生 一轮笔试 总结复盘(1) 作答语言:C/C++ 链表 二叉树
开发语言·c++·经验分享·面试·笔试
咔咔咔的43 分钟前
1970. 你能穿过矩阵的最后一天
c++
_OP_CHEN44 分钟前
【从零开始的Qt开发指南】(十九)Qt 文件操作:从 I/O 设备到文件信息,一站式掌握跨平台文件处理
开发语言·c++·qt·前端开发·文件操作·gui开发·qt文件
CSDN_RTKLIB1 小时前
【std::map】双向迭代器说明
c++·stl
王老师青少年编程1 小时前
信奥赛C++提高组csp-s之欧拉回路
c++·算法·csp·欧拉回路·信奥赛·csp-s·提高组
No0d1es1 小时前
2025年12月 GESP CCF编程能力等级认证C++六级真题
c++·青少年编程·gesp·ccf·6级
Terrence Shen1 小时前
【CUDA编程系列】之01
c++·人工智能·深度学习·机器学习
墨有6661 小时前
数学分析栈的出栈顺序:从算法判断到数学本质(卡特兰数初探)
c++·算法·数学建模
liulilittle2 小时前
LIBTCPIP 技术探秘(tun2sys-socket)
开发语言·网络·c++·信息与通信·通信·tun