略ios
变量的类型提供了多项信息:c++
- 变量占据的内存
- 变量可存储的信息
- 对变量可执行的操做
在c++中,可本身定义类型,以模拟要解决的问题。要声明新问题,可建立一个类。类是新类型的定义。函数
c++类是一个模板,用于建立对象。定义类后,即可像使用其余类型那样使用根据它建立的对象。code
类是一系列捆绑在一块儿的变量和函数,其中的变量能够是任何其余类型,也包括其余类。对象
类中的变量称为成员变量,类中的函数称为成员函数或方法。blog
其实成员就是数据与操做,封装以后就成为了一个类。内存
声明一个类,使用关键字class,好比:作用域
class Tricycle { public: unsigned int speed; unsigned int wheelSize; pedal(); break(); };
建立一个对象,可指定类名和变量名,好比:get
Tricycle wichita;
建立对象后,可以使用句点运算符(.)来访问其成员函数和成员变量。编译器
好比承接上面的:
Tricycle wichita; wichita.speed = 6; wichita.peadl();
访问控制符public、protected、private就不说了,免得长篇大论。
对于声明的每一个成员函数,都必须进行定义
成员函数的定义能够在类中,也能够在类外,在类外定义以类名打头,而后是做用域解析运算符(::)和函数名再加函数体。
好比:
void Tricycle::pedal() { std::cout<<"Pedaling trike\n"; }
程序清单8.1Tricycle.cpp
#include <iostream> class Tricycle { public: int getSpeed(); void setSpeed(int speed); void pedal(); void brake(); private: int speed; }; int Tricycle::getSpeed() { return speed; } void Tricycle::setSpeed(int newSpeed) { if (newSpeed >= 0) { speed = newSpeed; } } void Tricycle::pedal() { setSpeed(speed + 1); std::cout << "\nPedaling;tricycle speed " << speed << " mph\n"; } void Tricycle::brake() { setSpeed(speed - 1); std::cout << "\nBraking;tricycle speed " << speed << " mph\n"; } int main() { Tricycle wichita; wichita.setSpeed(0); wichita.pedal(); wichita.pedal(); wichita.brake(); wichita.brake(); wichita.brake(); return 0; }
构造函数与析构函数:
类有一个特殊的成员函数——构造函数,每次实例化对象时都将调用它。构造函数的职责是建立一个有效的对象,这一般包括初始化成员数据。构造函数与类同名,且没有返回值。构造函数能够接受参数,也能够不接受。
Tricycle类的构造函数:
Tricycle::Tricycle(int initialSpeed) { setSpeed(initialSpeed); }//使用了参数initialSpeed来设置成员变量speed的初始值
若是声明了构造函数,也应声明一个析构函数。构造函数建立并初始化对象,而析构函数执行清理工做并释放分配给对象的内存。析构函数的名称老是有腭化符号(~)和类名组成。析构函数不接收参数,也不返回值。
Tricycle类的析构函数:
Tricycle::~Tricycle() { std::cout<<"Destructed\n"; }
默认构造函数
假如您没有声明构造函数,编译器将自动建立一个默认构造函数——没有参数的构造函数,编译器建立的这个默认构造函数不执行任何操做,就如同没有参数且函数体为空同样。
- 默认构造函数是没有参数的构造函数,能够本身定义,也可让编译器提供
- 若是定义了构造函数,编译器就不会建立默认构造函数。这种状况下若是须要默认构造函数,须要本身定义。
一样的,若是没有定义析构函数,编译器也将建立一个函数体为空,不执行任何操做的析构函数。
程序清单8.2 NewTricycle.cpp
#include <iostream> class Tricycle { public: Tricycle(int initialAge); ~Tricycle(); int getSpeed(); void setSpeed(int speed); void pedal(); void brake(); private: int speed; }; Tricycle::Tricycle(int initialAge) { setSpeed(initialAge); } Tricycle::~Tricycle() { std::cout << "Destructed\n"; } int Tricycle::getSpeed() { return speed; } void Tricycle::setSpeed(int newSpeed) { if (newSpeed >= 0) { speed = newSpeed; } } void Tricycle::pedal() { setSpeed(speed + 1); std::cout << "\nPedaling;tricycle speed " << speed << " mph\n"; } void Tricycle::brake() { setSpeed(speed - 1); std::cout << "\nBraking;tricycle speed " << speed << " mph\n"; } int main() { Tricycle wichita(5); wichita.pedal(); wichita.pedal(); wichita.brake(); wichita.brake(); wichita.brake(); return 0; }