C/C++中类的声明和定义

时间:2023-01-06 16:41:29

1.类的声明和定义

以类Sales_item的定义来举例说明:

//Sales_item.h文件
//类Sales_item的声明
class Sales_item {
public:
//类Sales_item的构造函数
Sales_item(): units_sold(0), revenue(0.0) {}
//类成员函数avg_price的声明
double avg_price() const;
//类成员函数same_isbn的声明和定义
bool same_isbn(const Sales_item &rhs) const
{
return isbn == rhs.same_isbn;
}

private:
std::string isbn;
unsigned units_sold;
double revenue;
}; //注意此处有分号;哦

//Sales_item.cpp文件
//在类定义体外定义类Sales_item的成员函数avg_price
double Sales_item::avg_price() const
{
if(units_sold)
return revenue/units_sold;
else
return 0;
} //类成员函数的定义外没有分号;哦

类的所有成员都必须在类定义的花括号里面声明,此后,就不能再为类增加任何成员。类的成员函数即可以在类的定义内定义也可以在类的定义外定义。编译器隐式地将在类内定义的成员函数当作内联函数。

 

2.关于类的构造函数

       构造函数是特殊的成员函数,与其他成员函数不同的是,构造函数和类同名,而且没有返回类型。与其他成员函数相同的是,构造函数也有形参表(可能为空)和函数体。

        一个类可以有多个构造函数,每个构造函数必须有与其他构造函数不同数据或类型的形参。对于没有形参的构造函数我们称为默认构造函数,那么定义对象时,如果没有指明实参,就会调用默认的构造函数。

        值得注意的是,如果我们没有显式地定义默认构造函数,编译器会自动为这个类生成默认构造函数,这个自动生成的默认构造函数,就会按照一定的初始化规则来初始化类中的成员。

       构造函数与其他函数一样,具有名字、形参表和函数体,但是构造函数可以包含一个构造函数初始化列表。构造函数初始化列表以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个数据成员后面跟一个放在圆括号中的初始化式。举例如下:

Sales_item():units_sold(0), revenue(0.0) {}<span style="font-family: SimSun; font-size: 10.5pt; background-color: rgb(255, 255, 255);"> </span>


3.常量成员函数

在成员函数的形参表后加上关键字const后,就可以将成员函数声明为常量成员函数。在常量成员函数中,不能对对象中成员变量进行修改。

double avg_price() const;

4.定义类对象

Sales_item item;
class Sales_item item; //和结构体的变量的定义是一样的
两种方法是等价的,其中第二种是从C继承过来的。

5.类代码的文件组织

在实际编码中,通常将类的声明放置在头文件中。大多数情况下,在类外定义的成员函数则置于源文件中。