`
langzixin
  • 浏览: 127300 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

面向对象程序设计语言C++(一)

阅读更多

第一章 引论

 

   这一章非常重要,讲了面向对象的核心概念——数据封装、继承、多态性

 

   数据封装机制用来实现信息隐藏

 

   继承实现了一般和特殊的关系,解决了软件的重用性和扩充性问题

 

   多态性赋予程序更多的灵活性

 

第二章 C++语言与C语言的不同

 

   1、动态存储分配和释放存储空间

 

   C(malloc、free) ——>C++(new、delete)

 

   运算符new用于内存分配的使用形式

 

   type *p;

   p = new type;

  

   type是一个数据类型名;p是指向该数据类型的指针;new从称为堆的一块空闲内存中为程序分配一块内存,其大小与

   type类型的数据一样,该地址被存放于指针p中。

 

   运算符delete释放内存的方式

 

   delete p;

 

   p必须是一个指针,保存new分配的内存的首地址

 

   使用new分配的存储空间是没有名字的,只能通过指针来间接的访问它们

 

   典型用法:

 

   1.动态分配和释放单个数据的存储区

 

  

#include<iostream>   
  
using namespace std;   
  
int main(void) {   
       
    int *p;   
    p = new int;  
    if(!p) {   
           
        cout<<"allocation failure\n";   
        return 1;   
    }   
    *p = 20;   
    cout<<*p<<endl;   
    delete p;   
    return 0;   
}  

 

   2.用new运算符初始化单个数据的存储区

 

  

#include<iostream>
using namespace std;
int main(void) {
 
 int *p;
 p = new int(99);
 if(!p) {
  
  cout<<"allocation failure\n";
  return 1;
 }
 cout<<*p<<endl;
 delete p;
 return 0;
}

 

  3.动态分配数组的存储空间

 

    

#include<iostream>
using namespace std;
int main(void) {
 
 int i = 1;
 float *p;
 int j = i + 9;
 p = new float[j];
 /*
 动态分配数组要记住的重要一点是不能对之初始化
 指定数组大小的量j,可以是常数、常量或表达式,不能省略
 如果这样定义数组 int a[size] 则size必须为常数或常量,
 因为这里的数组大小在编译时就需确定,而例子中的数组空间
 是程序运行时动态分配的
          */
 if(!p) {          
                
  cout<<"allocation failure\n";
  return 1;
 }
 for(i = 0; i < 10; i++) {
  
  p[i] = 100 + i;
 }
 for(i = 0; i < 10; i++) {
  
  cout<<p[i]<<" ";
 }
 cout<<endl;
 delete []p;
 return 0;
}

 

   2、内联函数

 

   C语言中使用预处理的带有参数的宏调用来完成简单函数的调用(优点是没有系统的调用开销)

 

   C++中引入内联函数(inline)

 

   例如:inline void function(inta, int b);

 

   编译时,在调用function的地方用函数体替换,能够加快代码执行,减少调用开销

 

   注意:内联函数体内不允许有循环语句和开关语句   函数体一般不宜过长

 

   3、const说明符

 

   1.说明符号常量

  

   C语言中使用  #define PI  3.14     PI不是真正的符号常量,仅仅是一个字符串,没有类型,不占用存储空间,不能取

 

   其地址,只是在预处理时,将它替换为3.14

 

   C++中使用  const float PI = 3.14 PI是真正的符号常量,有类型,需要占用存储空间(实际上存放在常量数据区),

 

   能够取其地址,但不能被无const约束的指针指向,它的值不能被修改

 

   2.说明函数的形参

 

   void fun(const int num);//参数num被认为是常量,只能使用,不能进行修改

 

   3.说明指针变量

 

   指向常量的指针   const  type  *p;

 

   该类指针可以指向常量,也可以指向变量;只是从指针的角度而言,它所指向的是常量,通过该指针不能修改它所指向的

 

   数据;可以不初始化

 

   常指针  type  *const p;

 

   把指针本身而不是它指向的对象声明为常量;必须初始化;一旦初始化,不能指向其它数据;可以通过指针修改数据;

 

   实际上,该指针只能指向变量,而不能指向真正的常量

 

   指向常量的常指针  const  type  *const  p;

 

   必须初始化;该类型指针可以指向常量,也可以指向变量;但通过该指针不能改变它指向的数据;初始化后也不能指向

 

   其它数据

 

   4、函数原型

 

   C++需要所有函数具有函数原型,使得C++语言提供更强的类型检查

  

   (被调用函数的参数类型定义和类型转换;函数的参数个数;函数的返回类型)

 

   函数重载:具有相同的函数名,但有不同的参数表和各自的函数体

 

   5、缺省参数

 

   void  func(int num=0){......}

 

   两种方式调用func

 

   func(10);//传递显示的值,则num的初始值为10

   func();//无对应的实参,则num的初始值为0

 

   缺省参数提供了程序员处理更大复杂性的一种方法

 

   若有多个参数,则所有取缺省值的参数都必须出现在不取缺省值的参数的右边

 

   在使用具有缺省参数的函数时,若该函授名还被重载,要谨防二义性

 

   例如:void  func(int  x=1) {......}

            void  func() {......}

 

   则函数调用func() 就不知道是调用哪一个函数了  

1
0
分享到:
评论
1 楼 巧乐兹 2010-11-12  
[color=violet][/color]

相关推荐

Global site tag (gtag.js) - Google Analytics