C++ 对象和类

文章介绍了C++中的类概念,包括如何使用类来封装数据和方法,实现数据隐藏和抽象。内联函数用于提高效率,成员函数定义了类的行为,可以通过公有接口访问私有数据。同时,文章展示了如何定义和实现类成员函数,以及如何使用类对象进行操作。
摘要由CSDN通过智能技术生成

抽象和类

类是一种将抽象转换为用户定义类型的C++工具,它将数据表示和操纵数据的方法组合成一个整洁的包。

#ifndef STOCK00_H_
#define STOCK00_H_

#include <string>

class Stock
{
    private://可不写,默认是private
        std::string company;
        long shares;
        double share_val;
        double total_val;
        void set_tot(){total_val = shares * share_val;}//内联函数

    public:
        void acquire(const std::string & co,long n,double pr);
        void buy(long num,double price);
        void sell(long num,double price);
        void update(double price);
        void show();

};
#endif

访问控制

关键字privatepublic描述了对类成员的访问控制。使用类对象的程序都可以直接访问公有部分,但只能通过公有成员函数(或友元函数)来访问对象的私有成员。
公有成员函数是程序和对象的私有成员之间的桥梁,提供了对象和程序之间的接口。
防止程序直接访问数据被称为数据隐藏
将实现的细节放在一起并将它们与抽象分开被称为封装

内联方法

void set_tot(){total_val = shares * share_val;}//内联函数

类声明常将短小的成员函数作为内联函数,set_tol()符合这样的要求。
也可以在类声明之外定义成员函数,使之成为内联函数,只需在类实现部分中定义函数时使用inline限定符即可。

class Inline_test
{
	private:
		void test();
	public:
	
};
inline void Inline_test::test()//using inline in definition
{

}

实现类成员函数

  • 定义成员函数时,使用作用域解析运算符::来标识函数所属的类
  • 类方法可以访问类的private组件
#include<iostream>
#include"stock00.h"

//定义成员函数时,使用作用域解析运算符::来标识函数所属的类

void Stock::acquire(const std::string & co,long n,double pr)
{
    company = co;
    if(n<0)
    {
        std::cout << "Number of shares can't be nagative;" 
        << company << " shares set to 0.\n";
        shares = 0;

    }
    else
        shares = n;

    share_val = pr;
    set_tot();
}

void Stock::buy(long num,double price)
{
    if(num<0)
    {
        std::cout << "Number of shares purchased can't be negative. " 
        << "Transaction is aborted.\n";

    }
    else
    {
        shares += num;
        share_val = price;
        set_tot();
    }

}
void Stock::sell(long num,double price)
{
    using std::cout;
    if (num<0)
    {
        cout << "Number of shares sold can't be negative. "
         << "Transaction is aborted.\n";
    }
    else if(num > shares)
    {
        cout << "You can't sell more than you have! "
        << "Transaction is aborted.\n";

    }
    else
    {
        shares -= num;
        share_val = price;
        set_tot();

    }
}

void Stock::update(double price)
{
    share_val = price;
    set_tot();
}

void Stock::show()
{
    using std::cout;
    cout << "Company: " << company << "Shares: " 
            << shares << '\n' << "Share Price: $" 
            << share_val << " Total Worth: $" 
            << total_val << '\n';
}

使用类

要创建类对象,可以声明类变量,也可以使用new为对象分配存储空间,可以将对象作为函数的参数和返回值,也可以将一个对象赋给另一个。

  • 声明类:
Stock joe,kate;
  • 使用成员的成员函数
joe.show();//通过成员运算符(.)

所创建的每个新对象都有自己的存储空间,用于存储其内部变量和类成员,但同一个类的所有对象共享同一组类方法,即每种方法只有一个副本。
假设kate和joe都是Stock对象,则kate.shares将占据一个内存块,而joe.shares占用另一个内存块;但kate.show()和joe.show()都调用同一个方法,也就是说它们执行同一个代码块,只是这些代码用于不同的数据。

在这里插入图片描述

#include<iostream>
#include"stock00.h"
int main()
{
    Stock fluffy_the_cat;
    fluffy_the_cat.acquire("NanoSmart",20,12.50);
    fluffy_the_cat.show();
    fluffy_the_cat.buy(15,18.125);
    fluffy_the_cat.show();
    fluffy_the_cat.sell(400,20.00);
    fluffy_the_cat.show();
    fluffy_the_cat.buy(300000,40.125);
    fluffy_the_cat.show();
    fluffy_the_cat.sell(300000,0.125);
    fluffy_the_cat.show();

    return 0;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秃秃秃秃哇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值