对象和类

对象和类

基本概念和语法

根据面向对象的定义,类是一系列数据和针对这些数据的操作的集合。由于C++对结构体进行了扩展,所以在功能上类跟结构体的作用完全一致。但是在实际的使用上,结构体只用来封装数,而类用来表示一个对象的模板。

类的声明中分为两个部分,私有公有,两个部分声明的成员有相应的可访问性。

类的声明跟定义分开,如果在声明类的同时定了函数,该函数就会被编译成内联函数。并且在开发的时候一般将类的定义写在头文件中,对应类的定义写在一个单独的代码源文件中,编译的时候将多个文件进行编译即可。

在类中定义的函数都具有类访问域,也就是说不需要作用域解析符::也可以访问类中的变量,并且类中定义的所有方法都可以访问私有变量。

class Stock{
    private:
        double price;
    public:
        //在声明类的时候定义的函数,会变成内联函数
        void show() const{
            //可以直接访问类中的私有变量
            cout << "Stock price is: " << price << endl;
        };
};

声明类的时候有三种方法:

Stock x = Stock(23);    //显式调用构造函数
Stock y(23);            //隐式调用构造函数
Stock z{23};            //用列表参数调用构造函数

构造函数

用于初始化类,可以通过对构造函数的重载实现不同形式的类初始化形式。需要注意的是,构造函数的名字跟类的名字相同,并且没有返回类型。

在没有为类定义构造函数的情况下,编译器会为类定义一个不接受参数的构造函数,这种不接受参数的构造函数称为默认构造函数。如果定义了其他形式的构造函数,编译器就不会自动添加默认构造函数,这时需要手动提供默认构造函数。例如对上述Stock类添加构造函数:

class Stock{
    private:
        double price;
    public:
        Stock(double);
        Stock();    //创建了构造函数,必须手动创建默认构造函数
        void show() const;
        void changePrice(double);
};

析构函数

在销毁对象的时候调用,用于处理销毁类时的一些必要操作,通常用于与对象中用new申请的动态内存。其语法跟构造函数差不多,也没有返回类型, 不一样的是析构函数没有参数列表,并且函数名是在构造函数前面加上~。例如:

~Stock();

调用析构函数的时机有编译器决定。如果创建的是静态存储类对象,则在程序执行结束时被调用。如果对象是用new申请的动态内存,则在使用delete摧毁对象的时候调用析构函数。最后,程序可以创建临时对象来完成特定的操作,在这种情况下,程序将在结束对该对象的使用时调用其析构函数。

const成员函数

当我们申请一个const对象之后,之后对该对象的操作都不能改变其成员的值。但是我们不能确定哪些函数会改变类成员的值而哪些函数不会。这个时候我们需要把const关键字加在函数签名的后面,表示该函数不会修改类成员的值。对于一个const对象,不能调用它的非const函数。例如:

const Stock s = Stock(23);
s.show();   //合法,show()为conse函数
s.changePrice();    //非法,changePrice()不是const函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值