C++类相关(1)

来源:互联网 发布:手机录像播放软件 编辑:程序博客网 时间:2024/05/16 09:36

一、内联函数
1、定义位于类声明中的函数自动成为内联函数。
2、类声明外定义

class Stock{private:    void set();public:};inline void set(){    //a=b*c;}

二、构造函数
1、构造函数被用来创建对象,而不能通过对象来调用。
2、没有定义任何构造函数时,编译器提供默认的构造函数;为类定义了构造函数后,必须为它提供默认构造函数。

三、作用域为类的常量

class Bakery{private:    const int Months = 12;    double costs[Months];    //erro    ...

声明类只是描述了对象的形式,并没有创建对象。因此,在创建对象前,将没有用于存储值的空间。每个对象都会生成一个Months。
想实现目标,有两种方法。

1、使用枚举

class Bakery{private:    enum {Months = 12};    double costs[Months];    //erro    ...

声明枚举并不会创建类数据成员。也就是说,所有对象都不包含枚举。另外,Months只是一个符号名称,在作用域为整个类的代码中遇到它时,编译器将用12替换它。

2、使用static

class Bakery{private:    static const int Months = 12;    double costs[Months];    //erro    ...

创建一个名为Months的常量,该常量与其他静态变量存储在一起。

3、作用域内枚举

enum egg{small,Medium,Large};enum t_shirt{Small,Medium,Large};   //erro

如上,枚举量发生冲突,无法编译通过。避免该问题方法:

enum class egg{small,Medium,Large};enum struct t_shirt{Small,Medium,Large};//structclass可相互代替egg choice = egg::Large;t_shirt Floyd = t_shirt::Large;

常规枚举将自动转换为整型,但作用域内枚举不能隐式地转换为整型。在必要时可进行显式类型转换:
int Frodo = int(t_shirt::small); //Frodo set to 0
枚举用底层整型类型表示,在C++98中,如何选择取决于实现,因此包含枚举的结构的长度可能随系统而异。对于作用域内枚举,C++消除了这种依赖。默认为int。可用如下语句做出不同的选择:
enum class : short pizza{small, medium, large};
底层类型必须为整型。

四、类型转换
1、其它类型转换为类类型
只有接受一个参数的构造函数才能作为转换函数。
使用关键字explicit关闭自动类型转换的特性。

Stonewt(int stn, double lbs=0);   //int-to-Stonewt conversionexplicit Stonewt(double lbs);   //不能隐式转换

2、类类型转换为其他类型

class Stonewt{    ...    operator int() const;}Stonewt::operator int() const{    return int(pounds+0.5);}

函数无返回类型、没有参数,但必须返回转换后的值。

五、静态类成员与静态函数

class String{    ...    static int num;   //不能在此初始化}int String::static num = 0;   //初始化。如被使用,必须初始化

静态函数只能使用静态成员变量,如需使用非静态成员变量,需传入对象,通过对象来调用。

六、其他
1、C++11列表初始化
Stock hot_tip={"Derivatives", 100, 45.0};
与如下构造函数匹配:
Stock::Stock(const std::string & co, long n=0, double pr=0.0);

2、const成员函数
声明:
void show() const;
定义:
void stock::show() const{}
保证函数不会修改调用对象

0 0
原创粉丝点击