C++中如何实现含指定构造、重载运算符的Counter类并分离接口与实现?
C++ Counter类功能实现解答
Q8 构造函数实现
要求支持无参初始化、带int参数初始化、拷贝初始化三类调用,对应实现三类构造函数即可,核心代码如下:
首先是头文件中的类声明部分:
// Counter.h 头文件内容 class Counter { private: int count; // 题目要求的int类型属性 public: // 无参构造函数,count默认初始化为0 Counter(); // 带int参数的构造函数 Counter(int num); // 拷贝构造函数 Counter(const Counter& other); // 后续Q9、Q10的接口声明先放在这里 Counter& operator+=(const Counter& other); Counter& operator--(); // 前置-- Counter operator--(int); // 后置--,用int占位符区分前置版本 // 辅助获取count值的函数,方便验证结果 int getCount() const { return count; } };
构造函数的实现代码:
// Counter.cpp 实现文件内容 #include "Counter.h" // 无参构造实现 Counter::Counter() : count(0) {} // 带参构造实现 Counter::Counter(int num) : count(num) {} // 拷贝构造实现 Counter::Counter(const Counter& other) : count(other.count) {}
以上实现即可支持题目要求的三类调用语句。
Q9 +=算术赋值运算符实现
要支持c1 += c2的调用,需要重载+=运算符,实现代码如下:
// Counter.cpp 中添加的实现 Counter& Counter::operator+=(const Counter& other) { this->count += other.count; return *this; // 返回自身引用,支持连续赋值操作 }
Q10 前置/后置递减运算符实现
C++中用占位参数int区分前置和后置--,实现代码如下:
// Counter.cpp 中添加的实现 // 前置--:先减1,再返回当前对象 Counter& Counter::operator--() { count--; return *this; } // 后置--:先保存原对象副本,再减1,最后返回原副本 Counter Counter::operator--(int) { Counter temp(*this); count--; return temp; }
以上实现即可支持c1 = c2--和c1 = --c2两类调用。
Q11 C++类接口与实现分离要求说明
具体含义
类的接口与实现分离,指的是把类对外暴露的使用说明(接口)和内部的功能逻辑代码(实现)完全拆分开,使用者只需要看接口就能完成类的调用,不需要关心内部实现细节,也不需要依赖实现相关的代码。
实现方式
- 接口部分统一放在头文件(后缀一般为.h或.hpp)中:头文件里只写类的声明,包括成员变量定义、成员函数声明、友元声明等内容,不写函数的具体实现逻辑(内联函数除外)。
- 实现部分统一放在源文件(后缀一般为.cpp)中:源文件首先引入对应头文件,再编写每个成员函数的具体实现代码,实现时需要用
类名::作用域限定符标识所属类。 - 编译时将源文件统一编译链接即可,其他代码要使用该类时只需要引入对应的头文件即可。
优势
这种分离方式一方面可以隐藏实现细节,降低代码耦合度,另一方面可以减少编译依赖,修改实现逻辑时只需要重编译对应源文件,不需要重编译所有引用头文件的代码,大幅提升编译效率。
内容的提问来源于stack exchange,提问作者adeel butt
相关产品推荐
相关产品推荐

