C++程序设计总结

第一章面向对象编程原理

? 近五十年间,软件技术经历了多个阶段的发展演变

? 目前为止最流行的技术还是面向过程编程(POP)

? 面向过程编程采用了自顶向下的设计方案,问题被看做多个执行任务的序列。为完成这

些任务,须实现一些函数。

? 面向过程有两大不足,即:(1)数据可在程序内自由迁移,程序内任何函数都会引起数

据的更改,增加了数据的脆弱性。(2)它并不能很好地建模现实世界。

? 为了克服面向过程编程中的不足,人们发明了面向对象编程(OOP)。它采用自底向上

的编程方案,在程序开发中,把数据视为重要元素,不允许数据在系统内自由迁移。它还将数据和函数紧密绑定于成为类的数据结构中,函数可操作类中的数据。此特性称为数据封装。

? 在面向对象编程中,问题被视为一系列称为对象的实体的集合。对象是类的实例; ? 将数据与程序的直接访问隔绝,这称为数据隐藏。

? 数据抽象指的是,将各种必要特性合并,而不引入背景细节。

? 继承是这样的一个过程,即某类的对象得到另一类对象的属性。

? 多态指的是,一个名称,多种形态。在程序中,我们可以借此定义多个同名函数。此特

性亦可重载运算符,这样一来,同一个运算符在不同的实例下,会有不同的行为。 ? 动态绑定指的是,给定过程的代码,直到运行期被调用时才确定。

? 消息传递涉及对象名,函数(消息)名以及发送的信息。

? 与传统的编程技术相比,面向对象技术具有诸多优势——最显著的当属重用技术。 ? 在实时系统等几乎所有的计算机领域,面向对象编程的应用程序都已受到重视。 ? 不少语言都支持面向对象编程,流行的语言包括C++、Smalltalk和Java。

第二章C++入门

? C++是C语言的超级

? C++在C语言的基础上,添加了一些面向对象的特性,诸如对象、继承、函数重载和运

算符重载。这些特性加强了程序的清晰性,可扩展性,使程序容易维护。

? C++可用于开发各种系统,诸如编辑器、编译器、数据库、通信系统以及其他更多复杂

的实际系统。

? C++支持交互式输入输出,并引入了新的注释符号//,可用于注释单句。它也支持C语

言的注释风格。

? 和C程序一样,所有C++程序的执行入口都是main()函数,并以return()语句作为

结束。头文件iostream应包含于所有使用输入输出操作的程序开头。

? 所有标准C++程序都要包含using namespace std指令

? 典型的C++程序包括四个基本部分:也就是头文件包含部分、类声明部分、成员函数部

分和主程序部分

? 和C程序一样,C++程序可用于任何文本编辑器创建

? 大多数编译器提供了集成开发运行环境。流行的编译器系统有UNIX AT&T C++、Turbo C++

和微软公司的Visual C++

第三章符号、表达式和控制结构

? C++有不同的符号,包括关键字、标识符、常量、字符串和操作符

? 标识符指的是变量名、函数名、数组名、类名等

? C++中增加了void的一个用途,可用于声明通用指针

? C++中枚举数据类型略有不同,枚举类型名称为新的类型名。这样我们就可以声明枚举

类型的变量

? 在C++中,字符数组的大小应比字符串的实际长度大1

? C++增加了指针常量和常量指针的概念,对于前者我们不能修改赋予它的地址值,对于

后者,我们不能修改它指向的内容。

? 在C++的内存管理和多态实现中,指针被广泛地使用。

? C++中提供了const修饰符,用于声明常量,常量也是变量,只是其值不可变更。const

修饰符默认修饰整型。

? C++的变量类型检查非常严格,它不允许不同类型变量之间的赋值。类型转换是打破此

规的唯一办法。

? C++允许我们在程序中随处声明变量,而且可以利用声明处的表达式,在运行期完成初

始化。

? 引用变量给之前定义的变量提供了一个别名。它们都指向内存中的同一个数据对象。所

以,改变其中一个的值,另一边量的值也会随之改变。

? 引用变量必须在声明时初始化,这建立了它和要引用的变量之间的对应关系。 ? 作用于解析操作符(::)的主要用于类,以识别成员函数所属的类

? 除了malloc()、calloc()、free()函数外,C++提供了两个一元操作符,即new和delete,

以更好和更方便地分配和释放内存

? C++也提供了操纵器,来格式化输出数据。最常用的操纵器为endl和setw

? C++支持七种表达式类型。表达式中数据类型混用时,C++使用特定规则,自动地进行

类型转换。

? 使用类型转换操作符,C++也可显示地进行变量和表达式的类型转换

? 和C语言一样,C++也支持三种基本的控制结构,也就是顺序结构,分支结构和循环结

构,并使用各种控制语句实现它们,比如if、if…else、switch、do…while、while以及for。

第四章C++中的函数

? 在程序的不同处,调用函数可减少程序的大小。

? 在C++中,main()函数向操作系统返回一个整型值。因为函数的返回值类型默认是整

型,所以main()函数中的关键字int是可选的。而如果没有返回语句,大部分C++编译器会提示一个警告。

? 函数原型向编译器提供了函数的细节,比如参数的数目和类型,以及返回值的类型。 ? C++的引用变量使我们可以传引用参数给函数。函数也可以返回引用变量。

? 当函数声明为内联时,编译器用相应的函数代码替换了函数调用。一般情况下,小函数

才使用内联。

? 编译器可能会忽略函数的内联声明,如果函数声明太长或过于复杂,编译器将按常规函

数编译它。

? 当函数声明时,C++允许我们把默认值赋给函数参数。这种情况下,我们可以无需指明

所有参数,便可调用函数。默认参数总是由右到左添加。

? C++中,函数的参数可声明为常量,表示函数不可更改此变量。

? C++允许函数重载,也就是说,我们可以定义多个同名函数。通过检查参数数目和类型

编译器会准确地匹配函数调用和函数代码。

? C++支持两种新的函数类型,亦即友元函数和虚函数。

? C++标准库支持很多数学库函数,使用它们可以完成许多数学计算。

第五章 类和对象

? 类是结构体数据类型的扩展,一个类有多个成员变量和成员函数。

? 默认情况下,类的成员是私有的,而结构体的成员是公用的。

? 只有成员函数可以访问私有数据成员和私有函数。但是类外可以访问公用成员。

? 在C++中,类变量称为对象。利用对象并使用点操作符,我们可以访问类的公用成员。 ? 我们可以在类内或类外定义成员函数。成员函数和常规函数的区别在于,成员函数的头

部有一个隶属标识符,以表明所属类。

? 对象声明时,内存空间才会分配。每一对象的成员变量空间单独分配,而成员函数的空

间则统一分配。

? 类的一个成员变量可声明为静态成员,一般用于维护整个类的通用值。

? 静态成员变量必须定义于类外。

? 静态成员函数可访问声明在同类的静态成员,调用静态成员函数时需要用到类名。 ? C++允许我们使用对象数组。

? 对象可用作函数自变量。

? 友元函数不在友元声明类的作用域类,它可以访问累的所有私有数据。

? 函数可以返回对象。

? 如果成员函数不改变类内的任何数据,我们可以将其声明为常量成员函数,只要在函数

原型中加上关键词const(声明和定义都要加)。

? 我们也可以在函数内定义和使用类。这种类称为局部类。

第六章构造函数和析构函数

? C++提供了一种称为构造函数的特殊成员函数,它能帮助对象在创建时完成初始化。这

一过程被称为对象的自动初始化。

? 构造函数名和类名一致。

? 构造函数通常用来初始化变量,以及分配内存。

? 和常规函数一样, 构造函数也可以被重载。

? 当对象同时被创建和初始化时,复制构造函数被调用。

? 我们可以声明一个常量对象,其数据值不能改变。

? C++还提供另一种成员函数,称为析构函数。当对象不再需要时,会调用这种函数来销

毁对象。

第七章运算符重载和类型转换

? 运算符重载是C++的重要特性之一。又被称为编译时多态性。

? 使用重载特性,我们可以对两个用户自定义数据类型,比如说对象,执行相加的操作,

使用的语法就和基本数据类型一样。

? 我们可以重载几乎所有C++的运算符,下面几个是例外:

? 类成员访问符(. ,.*)。

? 作用域解析符(::)。

? 大小运算符(sizeof)。

? 条件运算符(?:)。

? 运算符重载是通过一种称为运算符函数的特殊函数完成的,该函数定义了运算符的特定

任务。

? 运算符重载时有一些限制。运算符函数必须是非静态的成员函数或者友元函数。重载的

运算符必须有至少一个用户自定义类型的操作数。

? 编译器不支持用户自定义数据类型的自动类型转换,我们可以使用自定义的转换运算符

函数,以实现自定义数据类型的自动类型转换。

? 转换运算符函数应符合下列条件:

? 必须是类成员。

? 必须不指定返回值。

? 必须没有参数。

第八章继承:类的扩展

? 从旧类派生一个新类的机制被称为继承。继承提供了可重用性的概念。通过继承,C++

的类可以被重用。

? 派生类继承了基类的一部分或所有特性。

? 只有一个基类的派生类被称为单继承。

? 可从多个类继承,这被称为多继承。

? 可从另一派生类继承类,这被称为多级继承。

? 当某类的属性被多于一个类继承时,这被称为层次继承。

? 不管是在公用模式还是私有模式,类的私有成员都不可被继承。

? 以公用模式继承的保护成员仍为派生类的保护成员,而以私有模式继承的保护成员,则

变成派生类的私有成员。

? 友元函数和友元类的成员函数可直接访问私有和保护数据。

? 派生类的成员函数只能直接访问保护和公用数据。不过他们可通过基类的成员函数访问

私有数据。

? 多路继承可能引起祖父基类的继承成员的重复。通过将共同的基类设为虚基类,我们可

以避免祖父基类成员的重复。

? 在多继承中,基类的创建次序与他们在派生类中的声明次序一致。

? 类可包含其他类的对象。这被称为包含关系或嵌套。

 

第二篇:C++程序设计总结

谈一下C++程序设计的一些个人经验及看法,仅供参考,希望能对大家有用

一、 心得:编程序首先是在纸上写一下代码,代码写好了,才到电脑上调试,这样可以

提高效率,还可以帮组记忆,因为是初学,对知识点比较陌生,所以写一下会有所记忆的,C++中也有东西需要理解才能编好的,举个例子:关于指针的传递,*是定义指针变量的记号,但作为运算符又是“取变量内容运算符”,要明白什么时候表示的是指针,什么时候是运算符。

二、 具体事例:

这学期学的主要是对类的设计,但是如何才能设计好类呢?结合我们的实验可以很好的阐明这些内容。

先对类有个大模块的认识:是抽象的一中数据类型!

包含:1.数据成员。2.成员函数。

下面对这两方面进行简单的设计。

拿“学生类“来说明:

class student

{

char name[20];//描述姓名的,用字符数组表示,能不能用指针呢?思考

int Number;//记录学生的学号的,用个整形的数就可以了,也可以用字符数组 char xinbie;//性别就用一个字符来表示,f为男性,m为女性

public:

…….

};

上述仅是描述了数据成员,成员函数没有进行组织,但是对一个类而言,数据成员是最基本的内容,因为所有的成员函数都是围绕着数据成员的,说直接点就是成员函数就是处理数据成员用的,因为数据成员是私有的,外界访问必须通过公有成员函数来完成,这是就得有这种成员的函数的设计:接上例

class student

{

char name[20];//描述姓名的,用字符数组表示,能不能用指针呢?思考

int Number;//记录学生的学号的,用个整形的数就可以了,也可以用字符数组 char xinbie;//性别就用一个字符来表示,f为男性,m为女性

public:

char *GetName(){ return name; }//便于外界访问私有数据成员name

int GetNumber(){ return number; }//便于外界访问私有数据number

char Getxinbie(){ return xinbie; }//便于外界访问私有数据成员xingbie

};

这样三个函数就设计成功了,但是为什么这三个函数是这样的设计的,注意

char *GetName();为什么是“char *”而不是”char”? 下面同样的提问,这是有关函数返回值得问题,思考!

但是这三个函数设计的是不是多余呢?因为书上好像有设计了三个这样的函数: void disName(){ cout<<name<<endl; }//对象展示姓名

void dispNumber() { cout<<number<<endl;}//对象展示学号

void dispxingbie() { cout<<xinbie<<endl; }//对象展示性别

这三个函数是分别来展示你所创建对象具体数据是什么,和上面三个成员函数并不矛盾,也不多余,而且有时也是很有必要的,仔细思考这里的机制。这是类就是这样了

class student

{

char name[20];//描述姓名的,用字符数组表示,能不能用指针呢?思考

int Number;//记录学生的学号的,用个整形的数就可以了,也可以用字符数组 char xinbie;//性别就用一个字符来表示,f为男性,m为女性

public:

char *GetName(){ return name; }//便于外界访问私有数据成员name

int GetNumber(){ return number; }//便于外界访问私有数据number

char Getxinbie(){ return xinbie; }//便于外界访问私有数据成员xingbie

void disName(){ cout<<name<<endl; }//对象展示姓名

void dispNumber() { cout<<number<<endl;}//对象展示学号

void dispxingbie() { cout<<xinbie<<endl; }//对象展示性别

};

不过这个类还没设计好,比如构造函数,复制构造函数,还有运算符重载函数等等,现在先讨论其他问题,即展示对象的数据函数: void show();

其实是和 前面三个void disName();void dispNumber();void dispxingbie();是一样的含义,不过这里是整体表先现出来的,应该这样设计,应该都比较熟悉了吧

void show(){cout<<”姓名:”<<name<<”,学号:”<<number<<”,性别:”<<xinbie<<endl;} 这样对象就可以通过这个函数来访问所有的数据成员。

下面来设计构造函数

其实书上有好多种构造函数,什么转换构造函数,其实都是构造函数。构造函数名和类名相同,对于一个类而言,当没有设计构造函数时,系统会有默认的构造函数,但是我认为通常都是自己设计构造函数,这样主动权掌握在自己手中,例如这样设计:

student(char *Name,int Number,char ch)

{

strncpy(name,Name,sizeof(name));

name[sizeof(name)-1]=’\0’;//仔细感受这个函数

number=Number;

xinbie=ch;

}

注意:形式参数都没有带默认值,也就是说没有重载带默认值的构造函数,这时创建对象时,必须提供实参,举个例子:主函数这样设计:

int main()

{

student p1;//构造对象不正确,系统会报错,因为构造函数没有默认值,系统也不会提供默认值的

……

return 0;

}

改成这样就好了 student p1(“li yong”,20xx31020,’f’);//正确构造函数。但是有时候,在主函数中确实用到了 没有给初始化的对象 student p1; 这时该怎么办?这时只需要改一下构造函数就可以了,构造函数设计成带默认值的构造函数,就是构造函数的形式参数都带默认值,即:

student(char *Name=“noname”,int Number=00000,char ch=’f’)

{

strncpy(name,Name,sizeof(name));

name[sizeof(name)-1]=’\0’;//仔细感受这个函数

number=Number;

xinbie=ch;

}

这样的话创建对象student p1:时,系统就不回报错,故建议设计构造函数时,都设计成参数带默认值的形式。

这时的类是这样的:

class student

{

char name[20];//描述姓名的,用字符数组表示,能不能用指针呢?思考

int Number;//记录学生的学号的,用个整形的数就可以了,也可以用字符数组 char xinbie;//性别就用一个字符来表示,f为男性,m为女性

public:

student(char *Name=“noname”,int Number=00000,char ch=’f’)

{

strncpy(name,Name,sizeof(name));

name[sizeof(name)-1]=’\0’;//仔细感受这个函数

number=Number;

xinbie=ch;

}

char *GetName(){ return name; }//便于外界访问私有数据成员name

int GetNumber(){ return number; }//便于外界访问私有数据number

char Getxinbie(){ return xinbie; }//便于外界访问私有数据成员xingbie

void disName(){ cout<<name<<endl; }//对象展示姓名

void dispNumber() { cout<<number<<endl;}//对象展示学号

void dispxingbie() { cout<<xinbie<<endl; }//对象展示性别

};

但是这时候问题又来了,假如在创建对象恰好创建了没有初始化的对象,而在后来中要这在这个对象中储存学生信息,该怎么办?这是需要设计这样的一个函数:

void set(char *Name,int Number,char ch)

{

strncpy(name,Name,sizeof(name));

name[sizeof(name)-1]=’\0’;//仔细感受这个函数

number=Number;

xinbie=ch;

}

在主函数中可以这样使用:

int main()

{

student p1;

p1.set(“li hong”,100002,’m’);

p1.show();

…….

return 0;

}

这样就可以了。回过头想一下这个void set(….);和构造函数是不是很相同,以前是不是感觉很没必要设计这个,因为有构造函数了 ,干嘛还要这个函数?这时应该感受到这个函数的必要性了吧。

这个例子看明白了,可以再试着重新设计一下实验3的第七题:水果类。

还有关于赋值,赋值,运算符重载函数问题,下次给出;

以上的有关问题仅是我自己的一些体会,相信大家都会了,见笑了!

三、最后的总结

我感觉设计C++在编译程序时碰到错误,不要慌,即使刚开始时系统报了几十个错误也不要担心,我认为这恰是一个机会,因为在逐步的改错中恰能明白自己的错误所在,就能更深刻的理解C++,错误是伴随C++的成长的,我特别喜欢系统报错,因为这样还知道自己设计的程序有错的,然后就是自己翻书,找错误,第一次熟悉程序不能离开课本,课本其实是最具有参考价值的,我们的课本是很好的,熟悉课本是再好不过了

struct Node

{

int a;

Node *next;

};

#include<iostream>

using namespace std;

void go(Node *&Head,int k)

{

for(int i=0;i<k;i++)

{

Node *p=new Node;

cin>>p->a;

p->next=Head;

Head=p;

}

}

void out(Node *&Head)

{

Node *p=Head;

while(p!=NULL)

{

cout<<p->a<<" ";

p=p->next;

}

}

void delet(Node *&Head)

{

Node *p=Head;

while(p!=NULL)

{

cout<<"删除:"<<p->a<<" "; Node *p1=p->next; delete p;

p=p1;

}

}

int main()

{

Node *head=NULL;

int p;

cin>>p;

go(head,p);

out(head);

delet(head);

return 0;

}

 

第三篇:C++程序设计总结

第一章面向对象编程原理

? 近五十年间,软件技术经历了多个阶段的发展演变

? 目前为止最流行的技术还是面向过程编程(POP)

? 面向过程编程采用了自顶向下的设计方案,问题被看做多个执行任务的序列。为完成这

些任务,须实现一些函数。

? 面向过程有两大不足,即:(1)数据可在程序内自由迁移,程序内任何函数都会引起数

据的更改,增加了数据的脆弱性。(2)它并不能很好地建模现实世界。

? 为了克服面向过程编程中的不足,人们发明了面向对象编程(OOP)。它采用自底向上

的编程方案,在程序开发中,把数据视为重要元素,不允许数据在系统内自由迁移。它还将数据和函数紧密绑定于成为类的数据结构中,函数可操作类中的数据。此特性称为数据封装。

? 在面向对象编程中,问题被视为一系列称为对象的实体的集合。对象是类的实例; ? 将数据与程序的直接访问隔绝,这称为数据隐藏。

? 数据抽象指的是,将各种必要特性合并,而不引入背景细节。

? 继承是这样的一个过程,即某类的对象得到另一类对象的属性。

? 多态指的是,一个名称,多种形态。在程序中,我们可以借此定义多个同名函数。此特

性亦可重载运算符,这样一来,同一个运算符在不同的实例下,会有不同的行为。 ? 动态绑定指的是,给定过程的代码,直到运行期被调用时才确定。

? 消息传递涉及对象名,函数(消息)名以及发送的信息。

? 与传统的编程技术相比,面向对象技术具有诸多优势——最显著的当属重用技术。 ? 在实时系统等几乎所有的计算机领域,面向对象编程的应用程序都已受到重视。 ? 不少语言都支持面向对象编程,流行的语言包括C++、Smalltalk和Java。

第二章C++入门

? C++是C语言的超级

? C++在C语言的基础上,添加了一些面向对象的特性,诸如对象、继承、函数重载和运

算符重载。这些特性加强了程序的清晰性,可扩展性,使程序容易维护。

? C++可用于开发各种系统,诸如编辑器、编译器、数据库、通信系统以及其他更多复杂

的实际系统。

? C++支持交互式输入输出,并引入了新的注释符号//,可用于注释单句。它也支持C语

言的注释风格。

? 和C程序一样,所有C++程序的执行入口都是main()函数,并以return()语句作为

结束。头文件iostream应包含于所有使用输入输出操作的程序开头。

? 所有标准C++程序都要包含using namespace std指令

? 典型的C++程序包括四个基本部分:也就是头文件包含部分、类声明部分、成员函数部

分和主程序部分

? 和C程序一样,C++程序可用于任何文本编辑器创建

? 大多数编译器提供了集成开发运行环境。流行的编译器系统有UNIX AT&T C++、Turbo C++

和微软公司的Visual C++

第三章符号、表达式和控制结构

? C++有不同的符号,包括关键字、标识符、常量、字符串和操作符

? 标识符指的是变量名、函数名、数组名、类名等

? C++中增加了void的一个用途,可用于声明通用指针

? C++中枚举数据类型略有不同,枚举类型名称为新的类型名。这样我们就可以声明枚举

类型的变量

? 在C++中,字符数组的大小应比字符串的实际长度大1

? C++增加了指针常量和常量指针的概念,对于前者我们不能修改赋予它的地址值,对于

后者,我们不能修改它指向的内容。

? 在C++的内存管理和多态实现中,指针被广泛地使用。

? C++中提供了const修饰符,用于声明常量,常量也是变量,只是其值不可变更。const

修饰符默认修饰整型。

? C++的变量类型检查非常严格,它不允许不同类型变量之间的赋值。类型转换是打破此

规的唯一办法。

? C++允许我们在程序中随处声明变量,而且可以利用声明处的表达式,在运行期完成初

始化。

? 引用变量给之前定义的变量提供了一个别名。它们都指向内存中的同一个数据对象。所

以,改变其中一个的值,另一边量的值也会随之改变。

? 引用变量必须在声明时初始化,这建立了它和要引用的变量之间的对应关系。 ? 作用于解析操作符(::)的主要用于类,以识别成员函数所属的类

? 除了malloc()、calloc()、free()函数外,C++提供了两个一元操作符,即new和delete,

以更好和更方便地分配和释放内存

? C++也提供了操纵器,来格式化输出数据。最常用的操纵器为endl和setw

? C++支持七种表达式类型。表达式中数据类型混用时,C++使用特定规则,自动地进行

类型转换。

? 使用类型转换操作符,C++也可显示地进行变量和表达式的类型转换

? 和C语言一样,C++也支持三种基本的控制结构,也就是顺序结构,分支结构和循环结

构,并使用各种控制语句实现它们,比如if、if…else、switch、do…while、while以及for。

第四章C++中的函数

? 在程序的不同处,调用函数可减少程序的大小。

? 在C++中,main()函数向操作系统返回一个整型值。因为函数的返回值类型默认是整

型,所以main()函数中的关键字int是可选的。而如果没有返回语句,大部分C++编译器会提示一个警告。

? 函数原型向编译器提供了函数的细节,比如参数的数目和类型,以及返回值的类型。 ? C++的引用变量使我们可以传引用参数给函数。函数也可以返回引用变量。

? 当函数声明为内联时,编译器用相应的函数代码替换了函数调用。一般情况下,小函数

才使用内联。

? 编译器可能会忽略函数的内联声明,如果函数声明太长或过于复杂,编译器将按常规函

数编译它。

? 当函数声明时,C++允许我们把默认值赋给函数参数。这种情况下,我们可以无需指明

所有参数,便可调用函数。默认参数总是由右到左添加。

? C++中,函数的参数可声明为常量,表示函数不可更改此变量。

? C++允许函数重载,也就是说,我们可以定义多个同名函数。通过检查参数数目和类型

编译器会准确地匹配函数调用和函数代码。

? C++支持两种新的函数类型,亦即友元函数和虚函数。

? C++标准库支持很多数学库函数,使用它们可以完成许多数学计算。

第五章 类和对象

? 类是结构体数据类型的扩展,一个类有多个成员变量和成员函数。

? 默认情况下,类的成员是私有的,而结构体的成员是公用的。

? 只有成员函数可以访问私有数据成员和私有函数。但是类外可以访问公用成员。

? 在C++中,类变量称为对象。利用对象并使用点操作符,我们可以访问类的公用成员。 ? 我们可以在类内或类外定义成员函数。成员函数和常规函数的区别在于,成员函数的头

部有一个隶属标识符,以表明所属类。

? 对象声明时,内存空间才会分配。每一对象的成员变量空间单独分配,而成员函数的空

间则统一分配。

? 类的一个成员变量可声明为静态成员,一般用于维护整个类的通用值。

? 静态成员变量必须定义于类外。

? 静态成员函数可访问声明在同类的静态成员,调用静态成员函数时需要用到类名。 ? C++允许我们使用对象数组。

? 对象可用作函数自变量。

? 友元函数不在友元声明类的作用域类,它可以访问累的所有私有数据。

? 函数可以返回对象。

? 如果成员函数不改变类内的任何数据,我们可以将其声明为常量成员函数,只要在函数

原型中加上关键词const(声明和定义都要加)。

? 我们也可以在函数内定义和使用类。这种类称为局部类。

第六章构造函数和析构函数

? C++提供了一种称为构造函数的特殊成员函数,它能帮助对象在创建时完成初始化。这

一过程被称为对象的自动初始化。

? 构造函数名和类名一致。

? 构造函数通常用来初始化变量,以及分配内存。

? 和常规函数一样, 构造函数也可以被重载。

? 当对象同时被创建和初始化时,复制构造函数被调用。

? 我们可以声明一个常量对象,其数据值不能改变。

? C++还提供另一种成员函数,称为析构函数。当对象不再需要时,会调用这种函数来销

毁对象。

第七章运算符重载和类型转换

? 运算符重载是C++的重要特性之一。又被称为编译时多态性。

? 使用重载特性,我们可以对两个用户自定义数据类型,比如说对象,执行相加的操作,

使用的语法就和基本数据类型一样。

? 我们可以重载几乎所有C++的运算符,下面几个是例外:

? 类成员访问符(. ,.*)。

? 作用域解析符(::)。

? 大小运算符(sizeof)。

? 条件运算符(?:)。

? 运算符重载是通过一种称为运算符函数的特殊函数完成的,该函数定义了运算符的特定

任务。

? 运算符重载时有一些限制。运算符函数必须是非静态的成员函数或者友元函数。重载的

运算符必须有至少一个用户自定义类型的操作数。

? 编译器不支持用户自定义数据类型的自动类型转换,我们可以使用自定义的转换运算符

函数,以实现自定义数据类型的自动类型转换。

? 转换运算符函数应符合下列条件:

? 必须是类成员。

? 必须不指定返回值。

? 必须没有参数。

第八章继承:类的扩展

? 从旧类派生一个新类的机制被称为继承。继承提供了可重用性的概念。通过继承,C++

的类可以被重用。

? 派生类继承了基类的一部分或所有特性。

? 只有一个基类的派生类被称为单继承。

? 可从多个类继承,这被称为多继承。

? 可从另一派生类继承类,这被称为多级继承。

? 当某类的属性被多于一个类继承时,这被称为层次继承。

? 不管是在公用模式还是私有模式,类的私有成员都不可被继承。

? 以公用模式继承的保护成员仍为派生类的保护成员,而以私有模式继承的保护成员,则

变成派生类的私有成员。

? 友元函数和友元类的成员函数可直接访问私有和保护数据。

? 派生类的成员函数只能直接访问保护和公用数据。不过他们可通过基类的成员函数访问

私有数据。

? 多路继承可能引起祖父基类的继承成员的重复。通过将共同的基类设为虚基类,我们可

以避免祖父基类成员的重复。

? 在多继承中,基类的创建次序与他们在派生类中的声明次序一致。

? 类可包含其他类的对象。这被称为包含关系或嵌套。

相关推荐