What's C++:
C++是一种静态类型(在编译时执行类型检查,而不是运行时)的、大小写敏感的编程语言,支持过程化编程、面向对象编程和泛型编程。
C++是一种静态类型(在编译时执行类型检查,而不是运行时)的、大小写敏感的编程语言,支持过程化编程、面向对象编程和泛型编程。
标准C++的组成部分:
- 核心库:提供所有的构件块,包括变量、数据类型、常量等;
- 标准库:提供大量函数,包括字符串操作等;
- 标准模板库(STL):提供大量方法,用于操作数据结构等。
typedef
- typedef可以为一个类型取新的名字,定义语法如下:
typedef type newname;
- 一个示例如下,程序运行通过,输出5:
#include<iostream> typedef int first; using namespace std; int main() { first a = 5; cout << a << endl; return 0; }
局部变量和全局变量
- 全局变量定义在所有函数之外,通常在程序头部;
- 局部变量定义在函数内部;
- 局部变量被定义时,系统不会对其初始化,而会对全局变量执行初始化操作;
- 使用#define预处理器
#define WIDTH 3.0 #define LENGTH 5.0
- 使用const关键字
C++存储类const int HEIGHT = 6;
- 存储类定义程序中变量或函数的范围和生命周期;
- auto存储类是所有局部变量默认的存储类;
- 不能对register变量使用取地址“&”运算符,因为它没有内存位置;
- static存储类在程序的生命周期内都保持变量的存在;
- extern存储类可以在其他文件中得到已定义的变量或函数的引用;
- mutable存储类仅适用于类的对象,被它修饰的变量永远处于可变的状态,即使它在一个const中。
- 私有的成员和受保护的成员不能使用直接成员访问运算符(.)来访问,公共成员可以:
#include<iostream> using namespace std; class Box { public: double length; double width; double height; }; int main() { Box box1, box2; double volume = 0.0; box1.height = 5.0; box1.width = 4.0; box1.length = 4.3; volume = box1.length * box1.width * box1.height; cout << "box1: " << volume << endl; box2.height = 4.0; box2.width = 3.5; box2.length = 3.8; volume = box2.height * box2.width * box2.length; cout << "box2: " << volume << endl; return 0; }
- 成员函数可以定义在类定义内部,也可以使用范围解析运算符(::)定义在类外部,类内定义时即使没有inline标识符也被声明为内联的;
- 如果在类内没有定义拷贝构造函数,编译器会自行定义一个;
- 类的友元函数定义在类外部,有权访问类所有的私有成员和保护成员,它不是任何类的成员函数;
- 如果一个函数是内联的,那么在编译时,编译器会把该函数的代码副本放置在每个调用该函数的地方,对内联函数进行任何修改,都需要重新编译函数的所有客户端,因为编译器需要重新更换一次所有的代码,否则将会继续使用旧的函数;
- this指针是所有成员函数的隐含参数,友元函数没有this指针,因为友元函数不是类的成员;
- 访问指向类的指针的成员,需要使用成员访问运算符(->);
- 无论创建多少个类的对象,类的静态成员都只有一个副本,静态成员在类的所有对象中是共享的,如果不存在其他的初始化语句,在创建第一个对象时,所有的静态数据都会被初始化为零,静态成员在类的外部通过使用范围解析运算符 :: 来重新声明静态变量从而对它进行初始化:
#include<iostream> using namespace std; class Box { public: static int Objectcount; Box(double l = 2.0, double w = 3.0, double h = 4.0) { length = l; width = w; height = h; //每创建一个对象加一 ++Objectcount; } double volume(void) { return length * width * height; } private: double length; double width; double height; }; //类外初始化静态成员 int Box::Objectcount = 0; int main() { Box box1(3.0, 3.0, 3.0); Box box2(5.0,4.0,3.0); cout << "Total numbers of objects: " << Box::Objectcount << endl; return 0; }
- 静态成员函数只能访问静态数据成员,不能访问其他静态成员函数和类外部的其他函数;
- 派生类可以访问基类中所有的非私有成员,C++类可以从多个类继承成员;
#include<iostream> using namespace std; class Shape { public: void setWidth(double w) { width = w; } void setLength(double l) { length = l; } protected: double width; double length; }; class PanitCost { public: double getCost(double area) { return (40 * area); } }; //派生类 class Rectangle :public Shape, public PanitCost { public: double getArea(void) { return width*length; } }; int main() { Rectangle rect; rect.setWidth(5.0); rect.setLength(6.0); double area; area = rect.getArea(); cout << "Panit costs " << rect.getCost(area) << endl; return 0; }
- 虚函数 是在基类中使用关键字 virtual 声明的函数。在派生类中重新定义基类中定义的虚函数时,会告诉编译器不要静态链接到该函数;
- 纯虚函数没有主体:
// pure virtual function virtual int area() = 0;