1.类通常被称为抽象数据类型,即将数据(状态)和作用于数据(状态)的操作视为一个单元。

抽象数据类型是面向对象编程和泛型编程的基础,我们可以抽象地考虑类该做些什么,而无须知道如何去完成这些操作

2.在类中声明成员函数是必须的,而定义成员函数则是可选的,在类内定义(不是声明)的成员函数默认为inline,当它们被调用时,编译器将试图在同一行内扩展该函数。

注意在inline成员函数的定义必须在调用该函数的每个源文件中是可见的。不在类定义体内定义的inline成员函数,其定义应放在有类定义的同一头文件中。

3.类的基本思想是数据抽象和封装

数据抽象:使用一个类型的程序员仅需了解类型的接口,不必考虑如何工作

封装:无法了解该类型如何实现,private封装了类型的实现细节,隐藏了内部实现的细节

并非所有的类型都必须是抽象的,标准库中的pair类就是一个具体类,而不是抽象类,具体类会暴露而非隐藏其实现细节。

4.C++中如果类是用struct定义的,则在第一个访问标号之前的成员是公有的,如果是class关键字,则是私有的

5.类可以定义自己的局部类型名字,例如public typedef std::string::size_type index;将此定义为public是希望用户使用这个名字,定义index来隐藏Screen的实现细节6

6.类声明由关键字class和类名字构成,类定义由关键字class,类名字以及由一对花括号括住的类定义体构成。

7,有时候,我们希望类的数据成员(甚至在const、成员函数内)可以修改,这可以通过将它们声明为mutable来实现。

例如

class Screen{

public:

private: 

mutable size_t access_ctr;

}

void Screen::do_display(std::ostream& os) const

{

++access_ctr;

os<<contents;

}

是成立的。


8.定义一个空的C++类,例如

class Empty
{
};


一个空的class在C++编译器处理过后就不再为空,编译器会自动地为我们声明一些member function,一般编译过去就相当于
class Empty
{
public:
Empty(); // 缺省构造函数
Empty( const Empty& ); // 拷贝构造函数
~Empty(); // 析构函数
Empty& operator=( const Empty& ); // 赋值运算符
Empty* operator&(); // 取址运算符
const Empty* operator&() const; // 取址运算符 const
};

一般的书上好像都是前面四种:默认构造函数,拷贝构造函数,默认赋值函数以及析构函数,后面两种其实属于,但要需要注意的是,只有当你需要用到这些函数的时候,编译器才会去定义它们。
如果你只是声明一个空类,不做任何事情的话,编译器会自动为你生成一个默认构造函数、一个拷贝默认构造函数、一个默认拷贝赋值操作符和一个默认析构函数。这些函数只有在第一次被调用时,才会别编译器创建。所有这些函数都是inline和public的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值