- 类的声明放在头文件中,类的实现放到cpp文件中
- 如果要把一个类的函数定义了内联函数,可以在声明中直接定义,或者在实现中添加inline关键字。
- 如果类没有任何构造函数,那么系统会提供一个无参的默认构造函数。如果提供了任何形式的构造函数,系统将不再提供无参的默认构造函数。
创建类对象的方式
Person p; // 调用无参构造函数
Person p1("David", 12); // 调用有参默认构造函数
Person p_person = new Person("Frank", 12); // 调用有参默认构造函数
Person p2 = {"david", 23}; // C++11的{}初始化方式
Person p3{"Frank", 12}; // C++11,省略等号
Person p4{}; // C++11,调用无法构造函数
const 成员函数
如果一个对象被const修饰,那么这个对象所有属性将不再改变
// const类型对象,对象属性不再改变
const Person p("david", 12);
但是如果这个对象,调用了可以改变属性的函数,那么编译器将会报错,因此需要在函数后面声明一个 const,表示函数不会修改对象的属性
// 声明
void show() const;
// 定义
void show() const
{
// ...
}
const函数规则: 如果函数不修改对象的属性,那么尽量声明为const函数。
this指针
this指针指向调用函数的类对象,因此如果要返回类对象,必须执行解引操作,也就 *this
。
类的常量
如下定义方式是错误的
class Test
{
const int MONTHS = 12;
double cost[MONTHS];
};
类的声明只是一个形式,在没有创建对象之前,MONTHS不会被分配内存,因此编译器在编译这段代码时,无法识别MONTHS的值。
可以使用枚举或静态变量,在类的声明中创建常量,因为它们在编译期就分配了内存
class Test
{
// 静态变量在编译期就分配内存
static const int MONTHS = 12;
double cost[MONTHS];
};
class Test
{
enum {MONTHS = 12};
double cost[MONTHS];
};