1. 课程目标
(1)以良好的方式编写C++的class,基于对象(Object Based)--面对的是单一class的设计
- 不带指针的类(class without pointer members)
- 带指针的类(class with pointer members)
(2)学习classes之间的关系,面向对象(Object Oriented)--面对的是多重classes的设计,classes和classes之间的关系。
- 继承
- 复合
- 委托
(3)C++学习内容:分为基础语言和标准库的学习
2. C vs C++,关于数据和函数
C语言中函数会处理数据,数据拥有不同的类型,因此会产生许多变量。各个函数均可处理根据数据产生的变量。
C++将数据和处理这些数据的函数包在一起(其他函数不可以处理这些数据),组成class(相当于C中的struct),根据这个class可以产生很多对象。
2. C++代码的基本形式
包含三部分:
主程序文件.cpp,包含main函数
类的声明,一般定义为.h文件,在主程序文件中用 “” 引入
标准库,在编译环境中带有,引入利用<>,可以是.h文件,也可以无延伸名。
备注:
标准库中,后缀为.h的头文件c++(98年后)标准已经明确提出不支持了。
C++ <iostream>和<iostream.h>是不一样,在编译器的include文件中是两个文件,代码也不同。
当使用<iostream.h>时,相当于在c中调用库函数,使用的是全局命名空间,也就是早期的c++实现;
当使用<iostream>的时候,该头文件没有定义全局命名空间,C++标准程序库中的所有标识符都被定义于一个名为std的namespace中,必须使用namespace std;这样才能正确使用标准库中的标识符。
3. Header的组成
(1)防卫式说明:防止重复引入,造成重复定义问题。依靠宏的名字,防止宏重名。
#ifndef __COMPLEX__
#define __COMPLEX__
...
#endif
以下代码若complex.h中,无防卫式声明,下面的代码会报出"./complex.h:7:7: error: redefinition of 'complex'"(重复定义)错误。这是因为,在编译器预编译的阶段,会将.h文件展开成其中的内容,无防卫式声明则会重复定义,造成上面的问题。
#include<iostream>
#include "complex.h"
#include "complex.h"
using namespace std;
int main() {
const complex c1(2.0,3.0);
complex c2(2.0);
return 0;
}
(2)前置声明 & 类的声明
C/C++编译器是由上到下编译的,所以应该在函数/变量的使用前声明或定义,否则编译器找不到会报错。前置声明可以就是告诉编译器有哪些变量或函数,可以先使用,后面再进行定义。
//error: "use of undeclared identifier 'n'"
#include<iostream>
using namespace std;
int func()
{
return n += 5;
}
int n = 5;
int main()
{
cout << func();
return 0;
}
//output : 10
#include<iostream>
using namespace std;
int func();
int n = 5;
int main()
{
cout << func();
return 0;
}
int func()
{
return n += 5;
}
前置声