C++编程入门(二) 互动版

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器

类和对象

简单的说,类就是一种用户定义的数据类型,跟结构类似。不同的是结构不能含有函数,而C++的类中既包含数据成员,又包含成员函数,通过它们可以对类自身进行操作。如:汽车可以看作是发动机、车轮、座椅等诸如此类的集合。也可以从功能的角度来研究,譬如,能移动,加速,减速,刹车等,那么汽车就可以看成是一个类。

类的定义可以分为说明部分(做什么)和实现部分(怎么做):。说明部分主要是说明数据成员的类型和名字,以及用来对数据成员进行处理的成员函数的声明。简单成员函数的实现也可以放在说明部分。实现部分是各个成员函数的实现。

类也是一种自定义的数据类型,也可以定义类的变量,我们叫做实例或者对象。所有对类的操作都必须通过对象来实现。当一个类定义了多个对象时,每个对象拥有各自的数据成员和成员函数。

类的成员(包括成员函数和数据成员)都有一个属性,叫做访问权限,有三种:

1.私有成员(private):缺省情况下,一个类中的所有成员都是私有的。私有成员只能被类本身的成员函数访问。并且不具有继承性,也就是子类也不能访问到私有成员。

2.公有成员(public):公有成员可以被类的成员函数使用,也可以被类外部的函数使用。

3.保护成员(protected):类的保护成员能被类及其派生类的成员函数和友员函数使用,具有继承性。简单说就是子类和友员可以访问,其他外部函数不能访问。

上面子类和友员还没学,不过你都会知道的!!!

怎么定义类和对象,怎么使用对象,栗子在哪里?例子就在下面:

class Point
{
    public:
        void setXY(int a,int b){x=a;y=b;}
        void move(int a,int b);
        void printPoint(){cout<<"x= "<<x<<" y= "<<y<<endl;}
        int getX(){return x;}
        int getY(){return y;}
    private:
        int x,y;
};
void Point::move(int a,int b)
{
    x+=a;
    y+=b;
}

上面定义了类Point,只有两个数据成员x和y,分布代表横纵坐标值,是Point类的私有成员,只有Point类的成员函数才能访问到。Point类的成员函数有5个,都很简单,实现都可以写在声明部分。Move函数我们拿出来做例子,没写在声明部分,而是写在了实现部分。注意Move前面的Point::,"::"是域运算符,表示成员函数属于哪个类。

再注意一下哈,我们可以把这部分代码单独保存为一个.h的头文件(例如Point.h), 以后其他文件的函数需要用到Point类时,只需要加入#include "Point.h"就可以了。

#include <iostream>
#include "Point.h"
using namespace std;
void main()
{
    Point p1,p2,*p;
    p1.setXY(3,4);
    p2.setXY(1,2);
    p=&p1;
    p->move(2,3);
    p2.move(3,4);
    p->printPoint();
    p1.printPoint();
    p2.printPoint();
}

第2行就是包含Point类定义的头文件。你要是保存成mypoint.h,记得这里要改成#include "mypoint.h"

第6行定义Point类的对象p1,p2,还定义了一个指向Point对象的指针p。

第7行开始就是调用对象的成员函数了,注意两点:

1.用指针取成员函数是'->',用对象名取成员函数是'.'。咦,这句话怎么这么熟悉,老师之前应该说过的吧。

2.要理解每个对象拥有各自的数据成员和成员函数这句话,打印出来可以看到p1的x和y值,与p2的x和y值是不同的。p1和p2有不同的内存空间,用来存放这些数据成员和成员函数。

在右侧代码框中编写程序:定义一个Student类,数据成员有学号、姓名和分数,成员函数包括打印信息、给各个数据成员赋值、获取各个数据成员的值。在main函数中定义Student类的对象,并进行操作。(这里你们好像只能把所有代码写在一个文件中,呜呜)