A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始


其中会有很多不足,能力有限,请见谅,自己整理的 ,看看吧。。。

一,基本概念。

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.分类管理:类声明(包括由数据原型表示的方法)应放在头文件中,定义成员数的源代码放在方法文件中,这样便将接口描述与实现细节分开,从理论上,只需要知道公共接口就可以实现使用类。对象时类的实例,这意味着对象是这种类型的变量。



7 个回复

倒序浏览
你的学习笔记也太详细了!!致敬
回复 使用道具 举报
山涧小草 发表于 2014-8-22 22:04
你的学习笔记也太详细了!!致敬

都是以前自学总结的,这还只是一小部分了,因为字数有限,所以只是挑取了其中一部分,共同学习吧 呵呵
回复 使用道具 举报
和Object-c比较是不是发现好多相似之处
回复 使用道具 举报
周易 发表于 2014-8-22 22:30
和Object-c比较是不是发现好多相似之处

确实是这样的,所以只有学好了c++ ,在学习其他的语言都很easy
回复 使用道具 举报
很细致啊。。楼主辛苦了。。
回复 使用道具 举报
很不错,楼主很用心
回复 使用道具 举报
   楼主怎么转以前的, 现在不总结学习经验  ?难道 在偷懒
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马