C++ Primer Plus第十天
过程性编程和面向对象编程
类概念
接口
接口是一个共享框架,供两个系统交互时使用
如何定义和实现类
class 类名
{
private://私有的
char company[30];
int chares;
public://公有的
void show();
}
类成员没定义权限默认为私有
类成员函数:void 类名::函数名(参数);外部访问
特点:可以访问类成员。
****std::cout.setf(std::ios_base::fixed,std::ios_base::floatfield)//可以避免科学计数法
****std::cout.precision(3);显示三位小数
类的构造函数和析构函数
目的就是为了想初始化int类型一样方便,而不是要用自己定义的函数
构造函数就是类名,为了防止弄混,通常在自定义的成员名用_结尾,或者m_开头
构造函数:
类名();
此时初始化的方式如下:
MyClass test2("测试2");
MyClass test3 = MyClass("测试3");
构造函数也有重载,默认参数
析构函数:
~类名();
对象的删除处理,例如数据的处理什么的。
可以把类声明放在头文件里面,定义放在.cpp中,这样可以编译.cpp,变成库使用
const成员函数
在C++中,只有被声明为const的成员函数才能被一个const类对象调用。
特点是在函数声明末尾加const:
void m_fun ()const;
this指针
单个对象是很明确的,但是涉及两个对象时,则要用this指针
例如比较两个类中的数值:
const Myclass & bijiao(const Myclass & s)const;
此时,this指针指向调用成员函数的对象,*this需要解引用
创建对象数组
MyClass lei[2] = {MyClass (…),MyClass(…)};
类作用域
类的常量:
class BB
{
private:
const int month = 12;
enum { M = 12};
static const int MM = 12;
}
作用域枚举:
传统的:名称不能相同
enum egg{Small,Medium,Large,Jumbo};
enum t_shirt{Small,Medium,Large,Xlarge};
C++11:
enum class egg{Small,Medium,Large,Jumbo};
enum class t_shirt{Small,Medium,Large,Xlarge};
需要显示类型转换:int bool = int(egg::Small);
抽象数据类型
不太懂为啥要这么做:
类似数组,类里面可记录数组的下标什么的。