【C++如此简单】如何编写一个简单的类?

本文介绍了C++中的类和对象,强调了抽象和封装的概念。通过类声明和方法定义展示了如何创建和实现一个Stock类,包括数据隐藏和成员函数的详细过程。类的实例化允许每个对象拥有独立的数据存储,而类方法在所有对象间共享。文章还讨论了类的公有接口与私有实现的分离,以提高代码的可维护性和易于修改。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

简单的实现一个C++的类

一、抽象和类?

生活中充满复杂性,处理这类问题的方法就是简化和抽象。
做法:将问题的本质特征抽象出来,并根据特征来描述解决方案。

二、类的创建

1.什么是类?

  1. 类是一种将抽象转换为用户定义类型的C++工具,他将数据表示操纵数据的方法组合成一个整洁的包。
  2. 类规范由两部分组成:类声明类方法定义

类声明:以数据成员的方式描述数据部分,以成员函数(方法)的方式描述共有接口。
类方法定义:描述如何实现类成员函数。


类声明是类的蓝图,而方法定义提供了细节。

2.类声明

在这里插入图片描述
类设计尽量将公有接口与实现细节分开,公有接口表示设计的抽象组件。
将实现细节放在一起并将他们与抽象分开被称为封装。数据隐藏(将数据放在类的的私有部分中)也是一种封装。

  1. 数据隐藏可以防止直接访问数据。
  2. 用户不需要知道数据如何表示,只会用就可以。
  3. 实现细节从接口设计中分离,程序维护更容易,修改时,不需要修改程序接口。
  4. 一般数据项设为私有,组成类接口的成员函数放在公有部分。
  5. 类默认为私有访问控制。
// class.h -- Stock class interface
// version 00
#ifndef CLASS_H_
#define CLASS_H_

#include <string>  

class Stock  // class关键字 + 类型名
{
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();
};    // note semicolon at the end

#endif

3.类方法定义

  1. 定义成员函数时,使用作用域解析符(::)来标识函数所属的类。
  2. 类方法可以访问类的private组件。
// class.cpp -- implementing the Stock class
// version 00
#include <iostream>
#include "class.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 negative; "
                  << 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()
{
    std::cout << "Company: " << company
              << "  Shares: " << shares << '\n'
              << "  Share Price: $" << share_val
              << "  Total Worth: $" << total_val << '\n';
}

总结

  1. 所创建的每个新对象都有自己的存储空间,用于存储其内部变量和类成员,但同一个类的所有对象共享一组类方法,即,每种方法只有一个副本。在OOP中,调用成员函数被称为发送消息,因此将同样的消息发送给两个不同的对象将调用同一个方法。
    在这里插入图片描述
  2. 尽可能的类声明和类定义分别写在两个文件中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一叶孤舟渡

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

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

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

打赏作者

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

抵扣说明:

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

余额充值