长安的花

当学问走过漫漫古道
凿刻入千窟,心也从愚昧中苏醒

0%

cpp学习11-对象

对象

使用对象进行编程是C++的核心,也是我们常说的C++比C“高级”的重要根据之一。

  • 对象的内部可以有变量和函数,而结构通常只由各种变量构成

对象的本质上不过是一种新的数据类型,只不过它拥有无限的潜力

创建简单的类

我们首先需要知道的一件事情是如何编写一个简单对象的模型 – 类

类(Class)就像是一副蓝图,它决定一个对象将是什么样的(具备什么样的属性、功能)

所以OOP过程的第一步是创建一个类,而每个类跟变量一样都有一个名字,我们就从如何声明一个类说起:

1
2
3
class  MyFirstClass
{
};//注意这里有分号

就这样,我们创建了一个类!虽然它什么都干不了,但它是一个起点,一个成功的开始。

  • 注意,类名的第一个字母采用大写是一种习惯的上的标准,但不是硬性规定。还有在类声明末尾,必须有一个分号,这一点跟C++结构情况相同。

  • 类由变量和函数组成,对象将使用那些变量来存储信息,调用那些函数来完成操作。所以人们常常会看到一些专门术语:类里边的变量称为属性,函数称为方法。注意,他们的本质没有改变。

对象和结构区别

对象里有变量也有函数,结构里一般只有变量。

实例

1
2
3
4
5
6
7
8
class Car{
public://类的变量称为属性,函数称为方法
std::string color;
std::string engine;
float gas_tank;
unsigned int Wheel;//unsigned的作用就是将数字类型无符号化, //例如 int 型的范围:-2^31 ~ 2^31 - 1,而unsigned int的范
//围:0 ~ 2^32。
};

在声明公有变量前先写出 单词 “public:”;

  • 给类加方法
    先在类的声明里创建一个方法的原型,稍后再实现这个方法

  • ::作用域解析符,作用是告诉编译器这个方法存在于何处,或者说是属于哪一个类。

  • std::string数据类型其实也是一个对象。我们一直在使用对象,只是自己还不知道罢了
1
2
3
4
5
6
//方法的定义通常安排在类声明的后面:
void Car::fillTank(float liter)
{
gas_tank += liter;
}

程序扩展一下就会有很大,这里只是写架构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include<iostream>
#include <windows.h>
#define FULL_GAS 85
class Car{
public:
std::string color;
std::string engine;
float gas_tank;
unsigned int wheel;

void fill_tank(float liter);
//方法声明
int running(void);
void setColor(std::string col);
void setEngine(std::string eng);
void setWheel(unsigned int whe);
void warning(void);
};
void Car::warning(void)
{
std::cout << "WARNING!!" << "the rest gas" << 100*gas_tank/FULL_GAS << "%\n";
}
int Car::running(void){
std::cout <<"I am running \n";
gas_tank--;
std::cout<<"gas:" << 100*gas_tank/FULL_GAS<<"%\n";
return gas_tank;
}

void Car::fill_tank(float liter){
gas_tank += liter;
}

void Car::setColor(std::string col){
color = col;
}

void Car::setEngine(std::string eng){
engine =eng;
}

void Car::setWheel(unsigned int whe){
wheel = whe;
}

int main(){

char i;
Car mycar;
mycar.setColor("white");
mycar.setEngine("V8");
mycar.setWheel(12);
mycar.gas_tank = FULL_GAS;

while(mycar.running()){
if(mycar.running()<10){
mycar.warning();
std::cout<<"continue run?(Y?N)\n";
std::cin>>i;
if('Y'==i||'y'==i){
mycar.fill_tank(FULL_GAS);
}else{
std::cout <<"car stop";
break;
}
}
}
return 0;
}

注意

  • 面向对象编程技术(object-oriented programming)可以说是面向过程技术(procedural programming)的替代品

  • 面向过程技术关注的是对数据进行处理的过程,OOP技术关注的是对数据进行怎样的处理。

  • 对象与结构有很多相似之处,但前者还可以有它们自己的函数。记住这点区别对掌握OOP技术的要领很有帮助。

  • 有些程序员喜欢把类的声明和类的函数的定义分别存入两个不同的文件,前者存入.h头文件,后者存入相应的.cpp文件

  • C++允许在类里声明常量,但不允许对它进行赋值

    1
    2
    3
    4
    5
    class Car
    {
    public:
    const float TANKSIZE = 85; // 出错@_@
    }

    解决这个方法,就是创建一个静态常量

1
2
3
4
5
6
class Car
{
public:
static const float FULL_GAS = 85;
}

一般不这么做;

  • 但是可以说,类里的声明常量不可以赋值,但是静态声明常量可以。

  • 声明类的同时,创建该类的对象

    1
    2
    3
    4
    5
    6
    class Car
    {
    public:
    std::string color;

    } car1, car2;

    这种做法在C++里是允许的。但作为一种良好的编程习惯,应该避免这种做法!

  • 将对象赋值给另一个对象

    1
    2
    3
    4
    Car  car1, car2;
    car1.setColor(“WHITE”);
    。。。。。。
    car2 = car1;

    把一个对象赋值给另一个同类的对象将会自动使同名的属性有同样的值

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

欢迎关注我的其它发布渠道