一,基本概念。
1.OOP(object oriented programming )特性:抽象,封装和数据隐藏,多态,继存,代码的可重用性 。
2.接口:一个共享窗口,共两个系统(如 计算机与打印机,用户和计算机)交互时使用。
3.类名:为识别类名,一般约定将类名首字母大写,
4.类成员访问控制:private 和 public 。使用类对象的程序都可以直接访问公有部分,但只能通过公有函数成员函数来访问私有成员。
公有函数成员是程序和对象的私有成员之间的桥梁,提供了对象和程序之间的接口。防止程序直接访问数据被称为数据隐藏。
5.类与结构体:类中默认对象为 private 结构体默认对象为 public 。c++通常使用类来实现描述,而把结构体限制为只表示纯粹的数据对象或没有私有部分的类。
6.实现类成员函数
① 成员函数的函数头使用作用域解析操作符(::)类指出函数所属的类。如:void stock ::update( double price ) ;
② 方法可以访问类的私有成员,非成员函数访问私有成员数据编译器将禁止这种操作(但是友元函数除外) 如:cout<<"company"<<company<<endl ;
三、
1.strncpy(s1,s2,n)
当n>s2 时,把s2 中字符串复制到s1中,后面通过‘\0’补足,当n<s2 时 s2中前n个字符复制过去,但由于后面没有空值字符,因此不是字符串,因此后需要添加'\0'
2.和cout一样,cerr 也是一个ostream 对象,他们之间的区别在于,操作系统重定向只影响cout,而不影响cerr ??????????
3.内联函数的特殊性要求在每个使用他们的文件中都对其进行定义,确保内联定义对多文件程序中的所有文件都可用,最简单的方法是:将内联定义放在定义类的头文件中
4.调用成员函数时,它将使用被用来调用他的对象的数据成员。所创建的每个新对象都有自己的存储空间,用于存储其内部变量和类成员,但同一个类的所有对象共享同一组
内方法,即每种方法只有一个副本。
5.客户/服务器模型:客户只能通过以公有方式定义的接口使用服务器,这意味着客户(客户程序员)唯一的责任是了解接口,服务器(服务器设计人员)的责任是确保服务器根 据该接口可靠并准确地执行。
6.小结。
①类设计的第一步:提供类声明。
类声明类似结构声明,可以包括数据成员和函数成员。声明有私有,其中声明的成员只能通过成员函数进行访问。声明还有公共部分,其中声明的成员可被使用类对象的程 序直接访问。通常情况下,数据成员被放在私有部分,成员函数被放在公有部分中。
②第二步:实现类成员函数。
在类声明中提供完整的函数定义,而不是函数原型,但是通常的做法是单独提供函数定义(除非函数很小,内联),这种情况下需要使用作用域解析操作符来指出成员函数
属于哪个类。如:char *Bozo :: Retort()
四、类的构造函数和析构函数
(一)构造函数
1.构造函数的原因:因为类中的数据有部分是私用的,这意味程序不能直接访问数据,程序只能通过成员函数来访问数据成员,因此需要设计合适的成员函数才能成功地将对象 初始化。(构造函数没有被声明类型)
如:Stock::Stock( const char*co , int n = 0 ,double pr = 0.0 )
此代码与acpuire() 函数相似,但是区别在于,程序声明对象时,将自动调用构造函数。类成员变量一般用 m_name 加以区别
2.使用构造函数:(c++提供了两种方式来初始化对象的方法)
① 显式的调用构造函数
Stock food = Stock( "word cabbage" , 250 , 1.25 ) ;
②隐式地调用构造函数:
Stock garment = ("furry mason" , 50 ,2.5 );
3.构造函数与new 的结合
Stock *pstock = new Stock ("electroshock game" , 18 , 19.0 ) ;
4.默认构造函数:在没有提供显式的初始化值时,被用来创建对象的构造函数。如:Stock stock1 ;(仅有用默认构造函数)可能调用:Stock::Stock () { }
重点:当且仅当没有定义任何构造函数时,编译器才会提供默认构造函数。为类定义了构造函数后,程序员必须为他提供默认构造函数。如果提供了非默认构造 函数 但是没有提供默认构造函数,程序将报错。Stock stock1 ;(提供构造函数但是没有提供默认构造函数) 原因:禁止创建为初始化的对象。
5.默认构造函数的两种方式:
第一种:给已有构造函数的所有参数提供默认值:如:Stock::Stock( const char*co = "error" , int n = 0 ,double pr = 0.0 ) ;
第二种:函数重载来定义另一个构造函数(没有参数的构造函数):Stock() ;
(二)析构函数:当类对象过期时,程序将自动调用一个特殊的成员函数,完成清理工作。
1.如果构造函数使用new 来分配内存,则析构函数将使用delete 类释放内存,没有使用new的类对象,将生成一个隐式析构函数即可。
2.对象过期时自动调用析构函数,如果程序员没有提供析构函数,编译器将隐式声明一个默认的析构函数,并在对象呗删除代码后,提供西宫函数的定义。
3.什么时候调用析构函数有编译器决定,通常不应该显式调用析构函数,一般情况如下:
静态存储类对象,程序结束时自动调用;自动存储类对象,程序执行完代码块时自动调用;new创建,驻留在堆栈中或自由存储区,使用delete来释放内存;
建立的临时对象完成的特定的操作,程序将在结束对该对象的使用时调用。
4.析构函数的形式:
Stock ::Stock () { } ;
六、总结
1.一般来说,私有成员存储信息,公有成员函数(又成方法)提供访问数据的唯一途径。类将数据和方法组合成一个单元,其私有性实现数据隐藏。
2.分类管理:类声明(包括由数据原型表示的方法)应放在头文件中,定义成员数的源代码放在方法文件中,这样便将接口描述与实现细节分开,从理论上,只需要知道公共接口就可以实现使用类。对象时类的实例,这意味着对象是这种类型的变量。
山涧小草 发表于 2014-8-22 22:04
你的学习笔记也太详细了!!致敬
周易 发表于 2014-8-22 22:30
和Object-c比较是不是发现好多相似之处
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |