类的基础语法
1. 构造函数
- 单参数构造函数,需要加explicit, 避免隐式转换
explicit person_t(const std::string& wname):_id(count++),_name(wname) {}
explicit worker_t(const std::string &name):person_t(name),_wage(0), _level(0) {}
- 初始化列表
- 初始化列表可以用来对于 const object member进行初始化
- 可以初始化 base class
worker_t():person_t(),_wage(0), _level(0) {}
- 无参构造函数的调用
person_t p //正确
person_t p() // 错误, 函数声明
2. 拷贝构造函数
- 拷贝构造函数也可以有初始化列表
- 拷贝构造函数声明如下
person_t(const person_t& other_worker);
- 如果不需要拷贝构造函数,需要将拷贝构造函数声明为private
- 赋值函数声明如下
person_t& operator=(const person_t& other_worker);
- 如果不需要赋值函数,则需要将赋值函数声明为private
- 如果类中包含virtual 声明,则虚函数最好被声明为virtual
- 析构函数不能抛出异常,必须处理所有异常
- 子类重写父类的函数
- 子类重写父类函数
virtual void info() {
std::cout << "this is person" << std::endl;
} - 则运行时多态,如果指针指向父类实例,则调用父类的实现,如果指针指向子类实例,则调用子类的实现
person_t *ptr1 = new worker_t("ptr1");
//调用worker_t 类的info
ptr1->info();
delete ptr1;
person_t *ptr2 = new person_t("ptr2");
//调用person_t类的info
ptr2->info();
delete ptr2;
7. overload
- 重载指同名函数的不同实现,重载可以因为参数的个数不同, 也可以使参数的类型不同
- 重载不可以仅仅返回值不同的情况
- const object member, const 成员正在在初始化列表中进行初始化
- non const object member
class person_t {
public:
static uint64_t ct;
}
推荐阅读
- 热闹中的孤独
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 一个人的旅行,三亚
- 布丽吉特,人生绝对的赢家
- 慢慢的美丽
- 尽力
- 一个小故事,我的思考。
- 家乡的那条小河
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量