类和对象总结

每写一个类,都要先调通———滚雪球

class<类名>

{

    public:

        公有数据成员和成员函数;

    protected:

        保护段数据成员和成员函;

    private:

        私有段数据成员与成员函数;

};

类的成员函数是实现类的行为属性的成员。一般将成员函数声明为函数原型,在类外具体实现成员函数。

成员函数的定义

返回值类型 类名::成员函数名(参数表)

{

    函数体

}

对象

对象是类的实例或实体。

类与对象的关系,如同c++基础数据类型和该类型的变量之间的关系。

格式:

类名 对象名1,对象名2,…,对象名n;

必须在定义了类之后,才可以定义类的对象。

class Point

{

    public:

        void InitPoint(float PointA_x,float Point A_y);

        void Move(float New_x,float New_y);

        float Getpointx();

        float GetPointy();

    private:

        float P1_x,P1_y;

};

int main()

{

    Point p1,p2;

}

类成员的访问

圆点访问形式:对象名.公有成员

指针访问形式:对象指针变量名->公有成员

类的定义和使用时应注意:

1.在类的定义中不能对数据成员进行初始化。

2.类的任何成员都必须指定访问属性,一般将数据成员定义为私有成员或保护成员,将成员函数定义为公有成员。

3.类中的数据成员可以是C++语法规定的任意数据类型。

4.类的成员可以是其他类的对象,称为类的组合。但不能以类自身的对象作为本类的成员。

5.类定义必须以分号“;”结束

6.class与struct的不同:

    class中,成员缺省情况是private。

    struct中,成员缺省情况是public。

内联函数

inline 函数原型

减少频繁调用小程序的运行的时间开销

函数重载

函数名相同,但参数不相同(类型不同,或者个数不同)的一组函数。

编译器根据不同的参数的类型和个数产生调用匹配

函数重载用于处理不同数据类型的类似任务

构造函数和析构函数

构造函数

构造函数是用于创建对象的特殊成员函数,当创建对象时,系统自动调用构造函数

构造函数作用:为对象分配空间;对数据成员赋初值;请求其他资源

没有用户定义的构造函数时,系统提供缺省版本的构造函数

构造函数名与类名相同:类名

构造函数可以重载

构造函数可以有任意类型的参数,但没有返回类型

析构函数

析构函数是用于取消对象的成员函数,当一个对象作用域结束时,系统自动调用析构函数

析构函数的作用是进行对象消亡时的清理工作

没有用户定义析构函数时,系统提供缺省版本的析构函数

析构函数名为:~类名

析构函数没有参数,也没有返回类型

默认构造函数

如果类中没有定义构造函数,函数将自动生成一个默认形式的构造函数,用于创建对象,默认构造函数形式:

类名::(){}

默认构造函数是一个空函数

通常,利用构造函数创建对象有以下两种方法:

1.利用构造函数直接创建对象,其一般形式为:

类名 对象名[(实参表)];

这里的“类名”与析构函数名相同,“实参表”是为构造函数提供的实际参数。

2.利用构造函数创建对象时,通过指针和new来实现。其一般语法形式为:

类名 *指针变量=new 类名[(实参表)];

例如:

Date *date=new Date(1998,4,28);

就创建了对象(*date1)。

需要显示引用this指针的三种情况

1.当类的非静态成员函数中返回类的对象本身或对象的引用的时候,直接使用return *this,返回本对象的地址时,return this。

2.当参数与成员变量名相同时,如this->x=x,不能写成x=x。

3.避免对同一对象进行赋值操作,判断两个对象是否相同时,使用this指针。

复制构造函数

复制构造函数用一个已有同类对象创建新对象进行数据初始化

c++为类提供默认版本的复制构造函数

程序员可以定义用户版本的复制构造函数

语法形式

    类名::类名(const 类名 & 引用名,…);

特点

1.复制构造函数名与类名相同,并且没有返回值类型。

2.复制构造函数可以写在类中,也可以写在类外。

3.复制构造函数要求有一个类类型的引用参数

4.如果没有显示定义复制构造函数,系统自动生成一个默认形式的复制构造函数。

浅复制

在用一个对象初始化另一个对象时,只复制数据成员,而没有复制资源,使两个对象同时指向同一资源。

深复制

通过一个对象初始化另一个对象时,不仅复制了数据成员,也复制了资源的复制方式。

常成员函数

在类中使用关键字const说明的函数为常成员函数,常成员函数的说明格式:

    类型说明符 函数名(参数表)const;

const是函数类型的一个组成部分,因此在函数的实现部分也要带关键词const。

常成员函数不能更新对象的数据,也不能调用非const修饰的成员函数(静态成员函数、构造函数除外)

静态成员函数

静态成员不属于某一个单独的对象,而是为类的所有对象所共有的

静态成员函数的作用不是为了对象之间的沟通,而是为了能处理静态数据成员:保证在不依赖于某个对象的情况下,访问静态数据成员

例如:

class A

{

    int n;

    static int s;

};

说明:

1.静态成员函数在类外定义时不用static前缀。

2.静态成员函数主要用来访问同一类中的静态数据成员。

3.私有静态成员函数不能在类外部或用对象访问。

4.可以在建立对象之前处理静态数据成员。

5.编译系统将静态成员函数限定为内部链接(在其他大文件中不可见)。

6.静态成员函数中是没有this指针的。

7.静态成员函数不访问类中的非静态数据成员。如有需要,只能通过对象名(或指向对象的指针)访问该对象的非静态成员。

类的包含

类的包含时程序设计中一种软件重用技术。即定义一个新的类时,通过编译器把另一个类“抄”进来。

当一个类中含有已经定义的类类型成员,带参数的构造函数对数据成员的初始化,需使用初始化语法形式。

构造函数(形参表):对象成员1(形参表),…,对象成员n(形参表);

自己调的程序:

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
class student
{
private:
    string name;
    int num;
    int score[3];
    float average;
    int order;
public:
    student(string a_name,int numb,int x,int y,int z)
    {
        name=a_name;num=numb;
        score[0]=x,score[1]=y,score[2]=z;
        order=1,average=(score[0]+score[1]+score[2])/3;
    }
    student()
    {
        score[0]=score[1]=score[2]=0;
        order=1,average=0;
    }
    string getA_name(){return name;}
    void setA_name(string A_n){name=A_n;}
    int getNum(){return num;}
    void setNum(int Num){num=Num;}
    int getOrder(){return order;}
    void setOrder(int x){order=x;}
    int getAverage(){return average;}
    void display();
};
void student::display()
{
    cout<<name<<"\t"<<num<<"\t"<<score[0]<<"\t"<<score[1]<<"\t"<<score[2]<<"\t"<<average<<"\t"<<order<<endl;
}
int main()
{
    student s1("wangpeiming",20171764,99,60,100);
    s1.display();
   cout<<endl;
    cout<<s1.getAverage()<<"\t"<<s1.getA_name()<<"\t"<<s1.getNum()<<"\t"<<s1.getOrder();
    cout<<endl;
    s1.setA_name("lalala");
    s1.setNum(20171746);
    s1.setOrder(2);
    s1.display();
    cout<<endl<<endl<<endl;
    cout<<s1.getAverage()<<"\t"<<s1.getA_name()<<"\t"<<s1.getNum()<<"\t"<<s1.getOrder();
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值