`
kmplayer
  • 浏览: 497244 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于类的一些语法:

阅读更多
所谓"书越读越薄",这话说得真是有道理.
最近频繁面试,不得已重温了下primer.

1,C++语言设计的主要目标:允许程序员定义自己的类,它们用起来和内置类型一样容易直观.

2,在普通的非const成员函数中,this的类型是T * const,即:this本身不能改变.

3,如果返回类型使用类定义的类型,则必须使用完全限定名.
例如:
class Screen
{
public:
    typedef std::string::size_type index;
    index get_cursor() const;
};
inline Screen::index Screen::get_cursor() const //这里index
{
    return cursor;
}

4,构造函数不能声明为const.

5,关于隐式类型转换
(1)可以用单个实参来调用的构造函数定义从形参类型到该类类型的一个隐式转换.

(2声明时使用关键字explicit抑制由构造函数定义的隐式转换.
注:explicit只能用于声明上.

6,static成员函数没有this形参,可以直接访问所属类的static成员,但不能直接使用非static成员.
static成员不是任何对象的组成部分,所以static成员函数不能被声明为const.

7,使用类的static成员的优点:
(1)作用域在类中,可以避免与其他类的成员或全局对象名字冲突.
(2)可以实施封装,static成员可以是私有成员
(3)static成员是与特定类关联的.

8,static关键字只能用于类体内部的声明中.

9,static数据成员必须在类定义体的外部定义(正好一次).
最好的做法:将static数据成员的定义放在包含类的非内联函数定义的文件中.

特别注意:只有const static数据成员可以在声明时初始化,但是仍然必须在类的定义体外定义一次.

如:
class Account
{
private:
    static const int period = 30; // 声明和初始化
    double daily_tbl[period]; // ok: period is constant expression
};
const int Account::period; //定义

static数据成员的类型可以是该成员所属的类型:
class Bar
{
public:
    // ...
private:
    static Bar mem1; // ok
    Bar *mem2;       // ok
    Bar mem3;        // error
};

static数据成员可以用作默认实参.
class Screen
{
public:
    // bkground refers to the static member
    // declared later in the class definition
    Screen& clear(char = bkground);
private:
    static const char bkground = '#';
};











分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics