《数据结构与算法 C++ 描述》篇1:类的基本知识

一个简单的类设计

class IntCell{
public:
	explicit IntCell(int init = 0):val(init){}
    int read() const{ return val; }
	void write(int x){val = x;}
private:
    int val;
}

知识点1:所有的单参数构造函数必须是 explicit 修饰,避免隐式类型转化。例如:

IntCell obj;
obj = 37; //无法赋值,由于构造函数的限制,37不能创建一个临时对象
obj.write(37); //ok

编译器试图

obj = 37;

转换为

IntCell temporary(37);
obj = temporary;

知识点2const 修饰成员函数,将修声明为访问函数。

int read() const { return val; }

const 修饰在函数名的括号后,表示当前函数为访问函数,而不是修改函数,无法修改成员变量值。

const 修饰在函数名的括号后,是函数签名的一部分。也就是说,可以存在两个同名同参数列表的一个const一个非const函数。

const的类对象无法访问非const的成员函数。

知识点3:三大函数:拷贝构造、拷贝赋值、析构函数

拷贝构造函数的调用时刻

//声明对象的同时初始化
IntCell B = C; //也是拷贝构造,而不是拷贝赋值
IntCell B(C); 

拷贝构造函数定义

IntCell::IntCell(const IntCell & rhs):val(rhs.val) {}

拷贝赋值函数定义

const IntCell & IntCell::operator=(const IntCell & rhs){
    if(this != &rhs) //避免自我赋值
        val = rhs.val;
    return *this;
}

返回值的考虑:返回一个对象可以满足链式赋值:a = b = c;

析构函数定义

IntCell::~IntCell(){
    // 如果有指针成员变量,应该 delete 指针
}

完全的类声明

class IntCell
{
public:
    explicit IntCell(int val = 0);
    IntCell(const IntCell & rhs);
    ~IntCell();
    const IntCell & operator=(const IntCell & rhs);
    int read() const;
    void write(int x);
private:
    int *val;
};

IntCell::IntCell(int val){
    val = new int(val);
}
IntCell::IntCell(const IntCell & rhs){
    val = new int (*rhs.val);
}
const IntCell & IntCell::operator=(const IntCell & rhs){
    if(this != &rhs)
        *val = *rhs.val; //在构造函数时,就定义了内存空间,因此直接赋值即可
    return *this;
}
int IntCell::read() const{
    return val;
}
void IntCell::write(int x){
    *val = x;
}

题 1.13

题目描述:设计一个类模板Collection,来存储Object对象的集合(在一个数组中),以及该集合当前的大小。提供public型的函数isEmpty makeEmpty insert remove contains。当且仅当该集合中存在等于x的一个Object时,contains(x)返回true

题目先供大家思考,之后补上我的设计。可以一起讨论。

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值