《c++入门经典》笔记8

《c++入门经典》笔记8

第八章 建立基本类

8.1类型是什么

ios

8.2建立新类型

变量的类型提供了多项信息:c++

  • 变量占据的内存
  • 变量可存储的信息
  • 对变量可执行的操做

在c++中,可本身定义类型,以模拟要解决的问题。要声明新问题,可建立一个类。类是新类型的定义。函数

8.3类和成员

c++类是一个模板,用于建立对象。定义类后,即可像使用其余类型那样使用根据它建立的对象。code

类是一系列捆绑在一块儿的变量和函数,其中的变量能够是任何其余类型,也包括其余类。对象

类中的变量称为成员变量,类中的函数称为成员函数或方法。blog

其实成员就是数据与操做,封装以后就成为了一个类。内存

声明一个类,使用关键字class,好比:作用域

class Tricycle
{
public:
    unsigned int speed;
    unsigned int wheelSize;
    pedal();
    break();
};

建立一个对象,可指定类名和变量名,好比:get

Tricycle wichita;

8.4访问类成员

建立对象后,可以使用句点运算符(.)来访问其成员函数和成员变量。编译器

好比承接上面的:

Tricycle wichita;
wichita.speed = 6;
wichita.peadl();

访问控制符public、protected、private就不说了,免得长篇大论。

8.5实现成员函数

对于声明的每一个成员函数,都必须进行定义

成员函数的定义能够在类中,也能够在类外,在类外定义以类名打头,而后是做用域解析运算符(::)和函数名再加函数体。

好比:

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;
}

8.6建立和删除对象

构造函数与析构函数:

类有一个特殊的成员函数——构造函数,每次实例化对象时都将调用它。构造函数的职责是建立一个有效的对象,这一般包括初始化成员数据。构造函数与类同名,且没有返回值。构造函数能够接受参数,也能够不接受。

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;
}

相关文章
相关标签/搜索