第一章面向对象编程原理
? 近五十年间,软件技术经历了多个阶段的发展演变
? 目前为止最流行的技术还是面向过程编程(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++中也有东西需要理解才能编好的,举个例子:关于指针的传递,*是定义指针变量的记号,但作为运算符又是“取变量内容运算符”,要明白什么时候表示的是指针,什么时候是运算符。
二、 具体事例:
这学期学的主要是对类的设计,但是如何才能设计好类呢?结合我们的实验可以很好的阐明这些内容。
先对类有个大模块的认识:是抽象的一中数据类型!
包含: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;
}
第一章面向对象编程原理
? 近五十年间,软件技术经历了多个阶段的发展演变
? 目前为止最流行的技术还是面向过程编程(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++
的类可以被重用。
? 派生类继承了基类的一部分或所有特性。
? 只有一个基类的派生类被称为单继承。
? 可从多个类继承,这被称为多继承。
? 可从另一派生类继承类,这被称为多级继承。
? 当某类的属性被多于一个类继承时,这被称为层次继承。
? 不管是在公用模式还是私有模式,类的私有成员都不可被继承。
? 以公用模式继承的保护成员仍为派生类的保护成员,而以私有模式继承的保护成员,则
变成派生类的私有成员。
? 友元函数和友元类的成员函数可直接访问私有和保护数据。
? 派生类的成员函数只能直接访问保护和公用数据。不过他们可通过基类的成员函数访问
私有数据。
? 多路继承可能引起祖父基类的继承成员的重复。通过将共同的基类设为虚基类,我们可
以避免祖父基类成员的重复。
? 在多继承中,基类的创建次序与他们在派生类中的声明次序一致。
? 类可包含其他类的对象。这被称为包含关系或嵌套。
第一章面向对象编程原理?近五十年间,软件技术经历了多个阶段的发展演变?目前为止最流行的技术还是面向过程编程(POP)?面向过程编程…
C程序的基本结构基本字符集C词汇标识符保留字常量变量分隔符注释符运算符表达式C语句C函数谁的存储地址指针的实质是一个存储有其它变量…
C程序设计知识点第1章C语言概述C程序设计知识点都懂了一定过第1章C语言概述1112C语言属高级语言区分字母的大小写以函数为基本单…
本课程总结姚琳主编第二版第一章C语言程序设计概述目的初步了解C语言程序学会使用C语言环境编辑运行C程序要求掌握程序设计语言程序算法…
C语言程序设计教学基本知识点第一章C语言基本知识1C源程序的框架尽管各个C源程序的功能千变万化但框架是不变的主要有编译预处理主函数…
一、绘图方法:1、颜色设置:(1)颜色函数:①QBColor:16种基本颜色。QBColor(0)~QBColor(15)②RGB…
《VisualFoxpro程序设计》课程小结08会计一班戴佳进20xx10420xx4本学期我们专业开设了《VisualFoxpr…
******************工程(K107+000~K108+500)设计总结一、概述本项目***************…
水台路设计总结北京军都晨宇工程设计有限公司20xx年x月水台路位于昌平区西部,南起于南雁路,途经西峰山村,终止于水台村,与西白路顺…
本次课程设计已经圆满结束了,通过这次课程设计,巩固和加深了学生对C语言基本知识和语言特点的理解和掌握,使学生熟练掌握了C语言编程和…