IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 1.5 自有数据类型 -> 正文阅读

[C++知识库]1.5 自有数据类型

1.5.1 类cururncy

在学习数据结构时,除了C++自身提供的int ,float ,double等数据类型以外,更多的数据结构是我们自己需要定义的。而需要自己定义的数据类型就是自有数据类型。

在C++中定义自有数据类型的最灵活的方法就是使用C++的类(class)结构。

现需要你设定一个处理货币类型的currency的对象(也称为实例)。

这种对象有三个成员:符号,美元,美分。例如$2.35(2 美元,35美分,符号是+)。

对这种对象我们想要执行的操作如下:

·给成员赋值

·确定成员值

·两个对象相加

·增加成员的值

·输出


程序1-13 currency类声明


class currency  //声明了类的名称currency,其类的成员在其后的一对“{}”中。
{
    public:
        enum signType{
            plus;
            minus;
        }
        //构造函数
        currency(signType theSign = plus,
                 unsigned long theDollar = 0,
                 unsigned int theCents = 0);
        //构析函数
        ~currency() {}
        void setValue(signType, unsigned long, unsigned int);
        void setValue(double);
        signType getSign() const {return sign;};
        unsigned long getDollars() const {return dollars;}; 
        unsigned int getCents() const {return cnets;};
        currency add(const currency&) const;
        currency& increment(const currency&);
        void output() const;
    private:
        signType sign;          //对象的符号
        unsigned long dollars;  //对象的数量
        unsigned int cents;     //美分的数量
};

类的成员声明了两个部分:

1.公有(public)

用来声明操作类对象的成员函数,他们对用户是可见的,是用户与类对象交互的唯一手段

2.私有(private)

私有部分一般放简单的变量,可赋值的结构。他们对用户是不可见的。通查与实现细节有关。

“一个优秀的软件设计者会在私有部分声明数据成员”

程序分析:

1.公有部分:

????????第一个成员函数:

        currency(signType theSign = plus,
                 unsigned long theDollar = 0,
                 unsigned int theCents = 0);

????????与类名相同,这种函数名与类名相同的函数称作构造函数

?在本例中,构造函数有三个参数,其缺省值(默认选项)分别是plus,0和0。

创建一个currency类对象时,构造函数就会被自动调用。

创建currency类对象的方法有如下两种:

currency f,g(plus3,45),h(minus,10);

currurcy *m = new currency(puls,8,12)

?第一行声明了三个currency对象f,g,h。其中f用缺省值(plus,0,0)初始化,结果为$0.00。

第二个成员函数:

~currency() {}

? ? ? ? 第二个成员函数是~currency函数,比类名多了一个~。这种成员函数成为析构函数。

每当一个currency类的函数超出作用域时,就会自动调用析构函数来删除这个对象。与构造函数一样,析构函数也没有返回值。?

?函数:

        void setValue(signType, unsigned long, unsigned int);
        void setValue(double);

这两个函数的名称相同,但是他们的签名是不一样的,所以导致他们的调用方法不一样。

g.setValue(minus,33,0);

h.setValue(20.52);

?成员函数(1):

        signType getSign() const {return sign};
        unsigned long getDollars() const {return dollars}; 
        unsigned int getCents() const {return cents};

????????getSign、getDollars和getCents返回对象的相应数据成员,关键字const 指明这些对象时不会改变值的。这些函数被称为常量函数

成员函数(2):

        currency add(const currency&) const;
        currency& increment(const currency&);

add()把调用对象的货币值与参数对象的货币值相加,返回相加结果。

increment()将符号加到调用对象上。

add()返回的是对象的值。

incerment()返回的对象的引用。(可改变对象的值)


程序1-13没有指定复制构造函数,C++将使用缺省复制构造函数,仅仅复制数据成员。


作用域说明符 “::”用于指明该函数currency类的成员函数。因此currency::currency表示currency的构造函数(因为与类名相同)。而currency::output表示currency类的有output成员函数。

程序1-14实现了currency的构造函数。仅仅调用了具有三个成员函数的setValue来给数据对象成员初始化。

程序1-14 currency的构造函数

currency::currency(signType theSign,unsigned long theDollars,unsigned int theCents)
{//创建一个currency类的对象
    setValue(theSign,theDollars,theCents);
}

程序1-15 给私有数据成员赋值

//给私有成员赋值
void currency::currency(signType theSign,unsigned long theDollars,unsigned int theCents)
{//给调用对象的数据成员赋值
    if(theCents > 99) // 美分太多
        throw illegalParameterValue("Cents should be < 100");
    
    sign = theSign;
    dollars = theDollar;
    cents = theCents
}

void currency::setValue(double theAmount)
{//给调用的对象的数据成员赋值
    if(theAmount < 0) {sign = minus;theAmount = - theAmount;}
    else sign = plus;
    dollars = (unsigned long)theAmount;                         //取整数部分
    cents = (unsigned int)((theAmount + 0.001 - dollars) * 100);//提取两位小数
}

程序1-17 函数increment 和 output?

currency& currency::increment(const currency& x)
{//增加x
    *this = add(x);
    return *this;
}

void currency::output() const
{//输出调用对象的值
    if(sign == minus) cout << '-';
    cout << '$' << dollars << '.';
    if(cents < 10) cout << '0';
}

类currency的数据成员以及被设为私有,用户不能直接访问。因此,用户通过下面的语句直接改变私有数据是允许的。

h.cents = 20;
h.dollars =100;
h.sign = plus;

?

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-18 17:22:53  更:2022-04-18 17:24:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:20:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码