类的构造函数和析构函数 Class Constructors and Destructors

本文深入探讨了C++中构造函数和析构函数的作用,解释了为何它们是类的基本组成部分,并提供了如何正确实现它们的示例。文章还讨论了在初始化类对象时遇到的问题及其解决方案。

首先要说明,这两个字中国人是乱翻译的,像这样的翻译还有很多,估计哪个砖家喝高了,duang 一下,就翻译成这样了

socket 套接字

handle 句柄

instance 实例


字典上constructor 是这样翻译的:

我是查的朗文词典 没有constructor ,只有construct  加or  就是做这个的人  ,初中老师是这样教我的

construct 1, to build a large building, bridge, road etc 构筑,建造

                2, an idea formed by combining pieces of knowledge 构想, 概念

                3, formal something that is built or made  [正式]建造物; 构成物


collins 的翻译也差不多

               1 , If you construct something such as building, road, or machine, you build it or make it

                2, If you construct something such as an idea, a piece of writing, or a system, you create it by putting different parts together


destruction 1 Destruction is the act of destroying something, or the state of being destroyed              //  摘自collins

                   2 the act or process of destroying something   破坏                                                           // 摘自朗文



看完翻译, construct 就是build 或者make 的意思

                   destruct   就是 destroy 的意思


本来很简单的两个词,硬是被翻译得看不懂了。



进入正题

我们先定义一个class

// stock00.h -- Stock class interface
// version 00
#ifndef STOCK00_H_
#define STOCK00_H_

#include <string>

class Stock // class declaration
{
private:
    std::string company;
    long shares;
    double shar_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


对于一个class来说,constructor 和 Destructor 某种程度是需要标准配备的, 下面我们一起讨论哈

为什么需要它们以及怎么去实现它们。

在C++里面,可以像使用标准类型(standard types) 一样去使用class object.

但是在初始化部分,还是有区别的

int year = 2001;     //可以这样玩
struct thing
{
    char *pn;
    int m;
};
thing amabob = {"wodget", -23};   //同样是可以的
Stock hot = { "Sukie's Autos, Inc.", 200, 50.25};   //  不准这样玩


    你不能这样去初始化一个Stock , 因为在Stock里面,有private 类型,也就是说,这种数据成员,函数是不能直接去

访问的。想访问这样的类型,唯一的办法是通过成员函数。那就是说,如果你想成功的去初始化一个object,那么你需要一个合适的成员函数,(当然,你可以把里面的private 成员改为public, 但是这样做,就违背了做用class的初衷: 数据隐藏.)


   一般来说,最好所有的object在创建的时候,就被初始化好。比如, 看看下面的code.

Stock gift;
gift.buy(10, 24.75);


对于当前Stock 类的实现, 我们没有给它的company 成员一个值。

如果要这样用,我们只能假设用户在调用任何成员函数之前去调用  acruire() 函数。

但是这种假设是没法保证一定成立的。为了解决这个问题, C++ 提供了一种特殊的成员函数,叫做class constructor.

用来构建新的object 以及给它的成员赋值。









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值