其中会有很多不足,能力有限,请见谅,自己整理的 ,看看吧。。。一,基本概念。 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.分类管理:类声明(包括由数据原型表示的方法)应放在头文件中,定义成员数的源代码放在方法文件中,这样便将接口描述与实现细节分开,从理论上,只需要知道公共接口就可以实现使用类。对象时类的实例,这意味着对象是这种类型的变量。
|