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
3. 赋值函数
- 赋值函数声明如下
person_t& operator=(const person_t& other_worker);
- 如果不需要赋值函数,则需要将赋值函数声明为private
4. 析构函数
- 如果类中包含virtual 声明,则虚函数最好被声明为virtual
- 析构函数不能抛出异常,必须处理所有异常
5. override
- 子类重写父类的函数
6. 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
- 重载指同名函数的不同实现,重载可以因为参数的个数不同, 也可以使参数的类型不同
- 重载不可以仅仅返回值不同的情况
8. 对象成员
- const object member, const 成员正在在初始化列表中进行初始化
- non const object member
9. 类成员
类所有的对象共享此变量,如下实例中的ct
class person_t {
public:
static uint64_t ct;
}
网友评论