了解C++程序设计_第1页
了解C++程序设计_第2页
了解C++程序设计_第3页
了解C++程序设计_第4页
了解C++程序设计_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

了解C++程序设计1.引言C++语言自20世纪80年代初由BjarneStroustrup博士在贝尔实验室设计以来,已经成为计算机编程领域的重要语言之一。它是C语言的一个扩展,继承了C语言的诸多特性,并加入了面向对象编程的概念。C++以其执行效率高、功能强大、灵活性好等特点,在系统软件、游戏开发、实时系统、嵌入式系统等多个领域有着广泛的应用。1.1C++语言概述1.1.1C++的历史与版本C++的发展始于1980年,最初被称为“CwithClasses”。1985年,这个语言被正式命名为C++。随后,C++经过多次标准化,包括ISO/IEC标准化组织的C++98、C++03、C++11、C++14、C++17和C++20等版本。每一个新版本都增加了更多的语言特性,提高了性能和安全性。1.1.2C++的主要特性C++的主要特性包括但不限于支持面向对象编程、类型安全、性能高效、编译时多态等。它的核心在于提供了抽象机制,如类(Class)和对象(Object),以及封装、继承和多态等概念。1.1.3C++与其他编程语言的关系C++在设计上受到了C语言的影响,同时也影响了后来的许多编程语言。例如,Java和C#在语法上与C++有相似之处。此外,C++与C有着密切的联系,许多C语言程序可以在不做修改或只做少量修改的情况下在C++编译器上编译运行。2.C++基础知识2.1数据类型与变量2.1.1基本数据类型C++的基本数据类型包括整型(int)、字符型(char)、布尔型(bool)、浮点型(float和double)。整型用于存储整数,字符型用于存储单个字符,布尔型用于逻辑真(true)或假(false),而浮点型用于存储带有小数的数值。2.1.2复合数据类型C++的复合数据类型主要包括数组、结构体(struct)、联合体(union)和枚举(enum)。数组用于存储同类型的元素序列,结构体允许我们将不同的数据类型组合成一个单一的类型,联合体允许我们在相同的内存位置存储不同的数据类型,而枚举则用于定义一组命名的整型常量。2.1.3变量的定义与初始化在C++中,变量是存储数据的命名位置。定义变量时,我们需要指定其类型和名称。初始化则是赋予变量一个初始值。例如:intnumber=10;//定义了一个整型变量number,并初始化为102.2运算符与表达式2.2.1算术运算符C++提供了一系列算术运算符,包括加(+)、减(-)、乘(*)、除(/)、取模(%)等,用于执行基本的数学运算。2.2.2关系运算符关系运算符用于比较两个值,并返回一个布尔结果(true或false)。常见的关系运算符包括等于(==)、不等于(!=)、大于(>)、小于(<)、大于等于(>=)和小于等于(<=)。2.2.3逻辑运算符逻辑运算符用于组合多个布尔表达式,包括逻辑与(&&)、逻辑或(||)和逻辑非(!)。逻辑运算符通常用于条件语句中,以决定程序应该执行哪个分支。3.C++控制结构3.1顺序结构顺序结构是C++程序设计中最基本的结构,它按照程序代码的编写顺序依次执行。在顺序结构中,程序从主函数的开始处依次向下执行,每执行一条语句后,便自动跳转到下一条语句。这种结构非常直观,易于理解和实现。3.2选择结构选择结构又称为分支结构,它允许程序根据条件的真假选择不同的执行路径。C++提供了if、if-else、if-elseif-else等多重分支选择结构。if语句:当指定条件为真时,执行相应的代码块。if-else语句:当条件为真时执行if后面的代码块,否则执行else后面的代码块。if-elseif-else语句:用于实现多条件判断,根据不同条件执行不同的代码块。3.3循环结构循环结构允许程序重复执行一段代码,直到满足某个条件为止。C++提供了for、while、do-while等循环语句。for循环:通常用于根据指定的次数重复执行代码块。while循环:当指定的条件为真时,重复执行代码块。do-while循环:与while循环类似,但至少执行一次代码块,然后判断条件是否为真,再决定是否继续执行。这些控制结构是C++程序设计的核心,通过灵活运用这些结构,可以构建出功能强大、适应性强的程序。在实际编程过程中,合理使用这些控制结构可以提高程序的可读性和可维护性。4.函数与预处理4.1函数的定义与声明C++中的函数是执行特定任务的代码块。一个函数通常包括返回类型、函数名、参数列表(可以为空)和函数体。在C++中,必须在调用函数之前对其进行声明。以下是函数定义的基本结构:返回类型函数名(参数类型参数名,...){

//函数体

...

return返回值;

}函数可以通过return语句返回一个值,如果没有返回值,则使用void作为返回类型。函数声明仅指定函数的名称、返回类型和参数类型,用于告诉编译器函数的存在和其接口。返回类型函数名(参数类型参数名,...);4.2作用域规则在C++中,变量和函数的作用域是指它们可以被访问的区域。作用域规则确保了变量和函数名称的唯一性,并防止了名称空间的污染。局部变量:在函数内部定义的变量,仅在函数内部有效。全局变量:在所有函数外部定义的变量,整个程序都可以访问。嵌套作用域:内层作用域可以访问外层作用域的变量,反之则不行。4.3预处理器C++预处理器是编译过程的一部分,它在编译之前对源代码进行操作。预处理器处理以#号开头的指令。#include指令用于包含头文件。#define指令用于定义宏。#if,#ifdef,#ifndef,#else,#elif,#endif用于条件编译。#pragma指令用于向编译器提供特定于实现的指示。例如:#include<iostream>//包含标准输入输出流库的头文件

#definePI3.14159//定义宏

#ifdefDEBUG

std::cerr<<"Debuggingisenabled."<<std::endl;

#endif预处理器指令不是C++语句,它们在代码被编译之前就被处理掉了,因此不会占用运行时的资源。5.指针与引用5.1指针的概念与使用指针是C++语言中的一项核心概念,它存储了变量的地址。通过指针,我们可以直接访问和操作内存中的数据。指针在C++中广泛应用于动态内存分配、数组操作、函数参数传递等场景。指针的声明方式是在类型前加上星号(*)。例如,一个整型指针可以用以下方式声明:int*ptr;对指针进行初始化,我们可以让它指向一个已存在的变量:intvar=10;

int*ptr=&var;//ptr指向var的地址通过解引用(使用星号操作符),我们可以获取指针指向的变量的值:intvalue=*ptr;//value被赋值为105.2指针与数组指针与数组的关系非常密切。数组名在C++中被视为指向数组第一个元素的指针。通过指针算术,我们可以轻松地遍历数组元素。例如,下面是如何使用指针遍历数组:intarray[5]={1,2,3,4,5};

int*ptr=array;//指针ptr指向数组的第一个元素

for(inti=0;i<5;++i){

std::cout<<*(ptr+i)<<std::endl;//输出数组元素

}在这个例子中,ptr+i将指向数组的下一个元素。5.3引用的概念与使用C++中的引用是另一个非常有用的特性,它允许我们为一个变量起一个别名。与指针不同,引用一旦初始化,就不能被重新绑定到另一个变量。引用的声明方式是在类型前加上取地址符(&),如下所示:intvar=20;

int&ref=var;//ref是var的引用对引用的操作实际上是对它所引用的变量的直接操作:ref=30;//var的值现在也变成了30引用经常用于函数参数传递,以实现函数对实参的修改。由于引用不是指针,因此不需要解引用,也不存在空引用或悬挂引用的问题。这使得引用在C++编程中成为了更安全的替代品。6.面向对象编程6.1类与对象6.1.1类的定义与成员变量类是面向对象编程的基础,它是对一组具有相同特征和行为的对象的抽象描述。在C++中,类通过关键字class来定义。类包含成员变量(也称为属性或字段)和成员函数(也称为方法)。以下是一个简单类的定义:classMyClass{

public:

intx;

inty;

};在这个类中,MyClass有两个成员变量x和y,它们都是整数类型。6.1.2构造函数与析构函数构造函数和析构函数是特殊的成员函数,它们分别在对象的创建和销毁时自动调用。构造函数的名称与类名相同,没有返回类型,用于初始化对象的成员变量。classMyClass{

public:

MyClass(inta,intb){

x=a;

y=b;

}

};析构函数的名称是在类名前加上波浪号~,同样没有返回类型。当对象超出其作用域时,析构函数被自动调用。~MyClass(){

//清理代码

}6.1.3成员函数成员函数定义了类对象的行为。它们在类内部声明,可以在类外部定义。classMyClass{

public:

intgetX()const{returnx;}

voidsetX(intval){x=val;}

private:

intx;

};6.2继承与多态6.2.1继承的概念与实现继承是面向对象编程中的一种机制,允许创建一个类(子类)来继承另一个类(基类)的属性和行为。在C++中,继承通过使用冒号和访问修饰符来实现。classBaseClass{

public:

voidbaseFunction(){

//...

}

};

classDerivedClass:publicBaseClass{

public:

voidderivedFunction(){

//...

}

};在这个例子中,DerivedClass继承了BaseClass。6.2.2多态的概念与实现多态性允许不同类的对象对同一消息做出响应的能力。C++通过虚函数实现多态。classBaseClass{

public:

virtualvoidshow(){

cout<<"BaseClassshow"<<endl;

}

};

classDerivedClass:publicBaseClass{

public:

voidshow()override{

cout<<"DerivedClassshow"<<endl;

}

};在上面的例子中,BaseClass有一个虚函数show,DerivedClass重写了这个函数。当我们使用指向基类的指针来调用show时,会根据对象的实际类型调用相应的版本。6.3接口与抽象类在C++中,抽象类是一种含有至少一个纯虚函数的类,不能直接实例化,仅作为接口使用。classAbstractClass{

public:

virtualvoidpureVirtualFunction()=0;//纯虚函数

};继承自抽象类的任何子类都必须实现这些纯虚函数,否则它们也将成为抽象类。这种方式可以用来定义一种接口,确保派生类拥有特定的方法。7.模板与异常处理7.1模板的概念与使用C++中的模板是一种泛型编程的工具,它允许编写与数据类型无关的代码,极大地提高了代码的复用性。模板分为两类:函数模板和类模板。函数模板定义了一个算法或操作,其数据类型被延迟到使用时才确定。以下是一个函数模板的示例:template<typenameT>

Tmax(Ta,Tb){

returna>b?a:b;

}在这个例子中,max函数可以在任何支持比较操作的数据类型上使用。类模板则允许定义类型无关的数据结构。例如,一个通用的数组类可以如下定义:template<typenameT,intsize>

classArray{

Tdata[size];

public:

T&operator[](intindex){

returndata[index];

}

//...其他成员函数...

};在上述类模板定义中,Array可以用于任何指定大小和类型的数组。7.2异常处理异常处理是C++中处理错误情况的一种机制。通过异常处理,可以在检测到错误的地方抛出异常,并在程序的另一部分捕获并处理它。异常处理的关键字包括try、throw和catch。以下是一个简单的异常处理示例:#include<iostream>

#include<stdexcept>

intmain(){

try{

intx,y;

std::cout<<"Entertwonumbers:";

std::cin>>x>>y;

if(y==0){

throwstd::invalid_argument("Divisionbyzero");

}

std::cout<<"Result:"<<x/y<<std::endl;

}catch(conststd::invalid_argument&e){

std::cerr<<"Error:"<<e.what()<<std::endl;

}catch(...){

std::cerr<<"Unknownexceptionoccurred"<<std::endl;

}

return0;

}在这个例子中,如果用户输入了0作为除数,程序将抛出一个invalid_argument异常,然后由catch块捕获并打印错误消息。异常处理使得错误处理变得更加灵活和模块化,有助于编写鲁棒的程序。通过合理使用模板和异常处理机制,C++程序设计可以达到更高的抽象层次,提升代码的可靠性和可维护性。结论通过前面的章节,我们对C++程序设计有了全面而深入的了解。C++作为一种高级编程语言,凭借其强大的功能和广泛的应用领域,在软件开发中占据着重要地位。它不仅继承了C语言的优点,还加入了面向对象编程的特性,为开发者提供了极大的灵活性和控制力。C++程序设计的重要性C++程序设计在众多领域有着广泛的应用,如游戏开发、嵌入式系统、网络编程、图像处理等。掌握C++编程技能,不仅可以提高个人的编程能力,还有助于拓宽职业发展道路。此外,C++作为一种系统级编程语言,能够帮助开发者更好地理解计算机的底层工作原理,从而设计出性能更优、效率更高的软件。如何继续深入学习和实践加强基础理论学习:深入学习C++的基本语法、数据结构、算法等基础知识,为以后的学习和实践打下坚实基础。动手实践:通过编写实际项目,将所学知识应用到实际开发中,不断提高编程技巧和解决问题的能力。阅读优秀代码:学习并分析优秀的C++开源项目,了解业界最佳实践,提高自己的编程水平。参加社区和论坛:加入C++相关的社区和论坛,与其他开发者交流学习心得,解决遇到的问题。持续学习:关注C++语言的发展动态,学习新版本带来的新特性和优化,不断更新自己的知识体系。总之,了解C++程序设计对于软件开发者来说具有重要意义。通过不断学习和实践,我们能够更好地掌握这门语言,为未来的职业生涯创造更多可能。了解C++程序设计1引言1.1C++语言的背景与重要性C++语言是在20世纪80年代由BjarneStroustrup开发的,作为对C语言的扩展,添加了面向对象编程的特性。C++继承了C语言的效率与灵活性,同时提供了更高的抽象能力,使得程序设计更为简洁和模块化。由于其出色的性能和强大的功能,C++在系统软件、游戏开发、实时模拟、嵌入式系统等领域有着广泛的应用。它是了解现代软件开发不可或缺的一门语言,对提升程序员的编程技能和逻辑思维能力有着重要的作用。1.2本文档目的与结构本文档旨在为读者提供一个全面了解C++程序设计的指南。从基础的语法和数据类型,到面向对象编程的概念,再到高级特性以及标准库的使用,本文档将逐一展开讲解。同时,通过项目实践环节,让读者能够将理论知识应用到实际开发中。本文档的结构安排合理,由浅入深,旨在帮助不同水平的读者都能够有所收获。第2章将介绍C++的基础知识,包括数据类型、变量、运算符和控制语句。第3章深入到面向对象编程的核心概念,包括类、对象、继承、多态以及模板。第4章探讨C++的高级特性,如指针、引用、异常处理和内存管理。第5章讲解C++标准库和常用工具,如STL、常用算法与数据结构,以及编译器和调试工具。第6章通过项目实践,分析设计模式的应用、性能优化与测试,以及案例分析。最后,第7章将总结C++程序设计的重要性,并对学习者的未来发展提出建议。2C++基础知识2.1数据类型与变量C++作为一种静态类型语言,它要求在编译时明确每个变量的类型。基本的数据类型包括整型(int)、浮点型(float和double)、字符型(char)和布尔型(bool)。除此之外,C++还支持枚举(enum)、数组(array)、指针(pointer)和引用(reference)等复杂类型。变量是存储数据的地方,它具有类型和名称。在C++中声明变量时,需要指定其类型和名称,例如:intnumber;

floatpi=3.14159;

charletter='A';

boolisTrue=true;除了基本数据类型,C++还提供了用户自定义的数据类型,如结构体(struct)、联合(union)、类(class)等。合理使用这些数据类型,可以有效地表示和存储程序中的数据。2.2运算符与表达式C++提供了一系列丰富的运算符,用于执行基本的数学运算、逻辑运算以及比较操作等。运算符与操作数的组合构成了表达式,例如:inta=10;

intb=3;

intsum=a+b;//加法运算符

intdiff=a-b;//减法运算符

intproduct=a*b;//乘法运算符

intquotient=a/b;//除法运算符

intremainder=a%b;//取模运算符除了算术运算符,C++还有关系运算符(如==、!=、>、<、>=、<=),逻辑运算符(如&&、||、!),以及赋值运算符(如=、+=、-=等)。2.3控制语句控制语句用于控制程序的流程,C++中主要有以下几种控制语句:条件语句:根据条件执行不同的代码分支。if语句:如果条件为真,执行代码块。if-else语句:在条件为真时执行一个代码块,否则执行另一个代码块。switch语句:根据不同的值选择执行多个代码分支。intvalue=1;

if(value==1){

//...

}elseif(value==2){

//...

}else{

//...

}循环语句:重复执行代码块直到满足某个条件。for循环:初始化表达式、循环条件和表达式更新组合在一起,控制循环次数。while循环:在条件为真时重复执行代码块。do-while循环:至少执行一次代码块,然后检查条件是否为真。for(inti=0;i<10;++i){

//...

}

while(value>0){

//...

}

do{

//...

}while(value>0);跳转语句:无条件地转移程序的控制流。break语句:立即退出循环或switch语句。continue语句:跳过当前循环的剩余部分,继续下一次循环。return语句:从函数中返回,并可选地提供一个返回值。掌握这些控制语句,可以构建出结构清晰、逻辑严谨的C++程序。3面向对象编程3.1类与对象C++作为一门支持面向对象编程(OOP)的语言,其核心是类(Class)和对象(Object)。类是创建对象的模板,它定义了一组属性(称为成员变量)和行为(称为成员函数)。对象是类的实例,拥有类的属性和行为。在C++中,定义一个类通常包括以下部分:类名、成员变量、构造函数、成员函数以及析构函数。构造函数用于初始化对象的成员变量,而析构函数则用于在对象生命周期结束时执行清理工作。C++中的类支持访问权限设定,即public、protected和private。这些权限控制符决定了类的成员在类的内部和外部的可访问性。对象通过使用类名和一对圆括号创建,这会触发构造函数。对象可以调用成员函数,访问和修改成员变量,以执行各种任务。3.2继承与多态继承是面向对象编程的一个关键特性,允许我们创建一个新的类(子类)来继承另一个类(父类)的属性和行为。子类会继承父类所有的public和protected成员,而private成员则不可继承。继承促进了代码的复用,减少了重复,使得程序结构更加清晰。多态是另一个重要的OOP概念,指的是一个接口,多个实现。在C++中,多态通常通过虚函数实现。当子类重写父类中的虚函数时,我们可以通过指向父类的指针或引用来调用子类的实现,这种行为称为动态绑定或晚期绑定。多态性使得程序设计更加灵活,便于扩展,也使得程序结构更加模块化。3.3模板与泛型编程C++的模板是泛型编程的基础,它允许编写与数据类型无关的代码。模板提供了创建函数和类的能力,这些函数和类可以使用不同的数据类型,而无需为每种类型重写代码。模板分为函数模板和类模板。函数模板允许定义一个函数,其操作的数据类型在调用时确定;而类模板则允许定义一个类,其成员可以使用不同的类型。使用模板可以显著提高代码的复用性,减少冗余,并提高类型安全性,因为所有的类型检查都是在编译时完成的。通过模板和泛型编程,C++程序员可以创建更通用、更灵活的库和组件,这些都是现代软件开发不可或缺的部分。4C++高级特性4.1指针与引用C++中的指针和引用是高级特性,对于理解程序内存的工作方式至关重要。指针是一个变量,其值为另一变量的地址,可以用于直接访问和修改内存中的数据。指针的引入可以带来诸多好处,如动态内存分配、数组操作、以及实现如函数指针等复杂的数据结构。引用则是一种隐式的指针,为另一个变量提供了一个别名。与指针不同,一旦引用被初始化为一个对象,就不能被重新绑定到另一个对象。在C++中,引用常用于参数传递,以确保函数能够修改传入的变量。指针和引用的使用可以提高程序的效率和灵活性,但也需要谨慎,因为不正确的内存操作可能导致程序崩溃或不稳定。4.2异常处理C++异常处理是一种处理运行时错误的方法,它提供了一种将控制流从错误发生点转移到能够处理错误的代码段的机制。异常处理的关键字包括try、throw、catch。通过抛出(throw)异常,程序可以表明发生了错误或异常情况,并在try块中捕获这些异常。catch块随后处理这些异常。这种方法有助于简化错误处理逻辑,减少错误处理代码与常规代码的交织,提高了代码的可读性和可维护性。异常处理的一个优点是它允许错误处理的代码和正常流程的代码分离,从而使得两种逻辑更清晰。4.3内存管理C++提供了手动管理内存的能力,这是其强大之处,也是复杂性的来源。动态内存分配允许程序员在程序运行时分配和释放内存,这在处理未知大小的数据集时非常有用。new和delete关键字用于动态分配和释放内存。然而,动态内存管理不善可能导致内存泄漏和内存碎片,从而降低程序的性能和稳定性。为了更有效地管理内存,C++还提供了智能指针(如std::unique_ptr和std::shared_ptr),它们能够自动管理内存的生命周期,减少了内存泄漏的风险。在现代C++实践中,推荐使用智能指针和标准库容器,以减少直接操作内存的需要,同时保持程序的效率和稳健性。5C++标准库与常用工具5.1标准模板库(STL)C++的标准模板库(STL)是一个非常强大的库,提供了一系列模板类和函数,用于处理数据结构和算法。STL主要包含以下几个部分:容器(Containers):如vector、list、map等,用于存储数据。迭代器(Iterators):用于遍历容器中的元素。算法(Algorithms):如sort、search、merge等,用于处理容器中的数据。适配器(Adapters):如queue、stack等,提供了特定功能的容器。容器STL提供了多种容器,包括顺序容器、关联容器和容器适配器。顺序容器:vector、deque、list、forward_list等,它们按照元素插入的顺序存储元素。关联容器:set、map、multiset、multimap等,它们根据元素的键值进行排序存储。容器适配器:queue、stack、priority_queue等,它们基于其他容器实现特定功能。迭代器迭代器是STL的核心概念之一,用于遍历容器中的元素。根据迭代器的访问能力,可以分为以下几类:输入迭代器:支持单向前进,只支持读取操作。输出迭代器:支持单向前进,只支持写入操作。前向迭代器:支持单向前进,支持读写操作。双向迭代器:支持双向前进,支持读写操作。随机访问迭代器:支持任意位置的读写操作。算法STL提供了丰富的算法,这些算法主要分为以下几类:非修改序列操作:如find、count、search等,用于查找或统计序列中的元素。修改序列操作:如copy、replace、remove等,用于修改序列中的元素。排序和通用算法:如sort、merge、random_shuffle等,用于对序列进行排序或生成特定序列。数值算法:如accumulate、inner_product等,用于执行数值计算。适配器STL中的适配器主要用于将一种容器或迭代器的行为转换为另一种行为。例如,queue和stack是基于deque或vector实现的。5.2常用算法与数据结构在C++中,除了STL提供的算法和数据结构,还有一些常用的算法和数据结构,如下:排序算法:冒泡排序、快速排序、归并排序等。搜索算法:线性搜索、二分搜索等。数据结构:链表、树(如二叉树、AVL树)、图等。这些算法和数据结构在实际编程中广泛应用,有助于解决各种问题。5.3编译器与调试工具为了更好地进行C++程序设计,熟悉编译器和调试工具是非常必要的。编译器C++程序需要通过编译器将源代码转换成可执行文件。常用的C++编译器有:GCC(GNUCompilerCollection)ClangMicrosoftVisualStudio编译器可以帮助我们检查代码中的语法错误和潜在问题,从而确保程序的正确性。调试工具调试工具用于帮助开发者找到程序中的错误。以下是一些常用的调试工具:GDB(GNUDebugger)ValgrindXcodeDebugger(适用于MacOS)通过使用调试工具,我们可以观察程序的运行状态,分析程序执行过程中的问题,并找到相应的解决方案。熟悉C++标准库与常用工具是掌握C++程序设计的关键。通过学习和实践,我们可以更加高效地开发C++程序。6C++项目实践6.1设计模式与应用设计模式是在软件设计过程中,针对特定问题的一般性解决方案。在C++程序设计中,设计模式能够提高代码的可维护性和可扩展性。以下是一些常用的设计模式及其应用:6.1.1单例模式单例模式确保一个类仅有一个实例,并提供一个全局访问点。例如,在游戏开发中,游戏引擎通常使用单例模式确保只有一个游戏状态管理器。classSingleton{

public:

staticSingleton&getInstance(){

staticSingletoninstance;

returninstance;

}

private:

Singleton(){}//私有构造函数

Singleton(constSingleton&);//阻止复制构造

Singleton&operator=(constSingleton&);//阻止赋值操作

};6.1.2工厂方法模式工厂方法模式定义一个接口用于创建对象,但让子类决定实例化哪个类。例如,在图形界面库中,可以根据不同平台创建不同类型的按钮。classButton{

public:

virtualvoiddisplay()=0;//纯虚函数

};

classWindowsButton:publicButton{

public:

voiddisplay()override{

//实现Windows风格的按钮

}

};

classMacButton:publicButton{

public:

voiddisplay()override{

//实现Mac风格的按钮

}

};

classButtonFactory{

public:

virtualButton*createButton()=0;

};

classWindowsButtonFactory:publicButtonFactory{

public:

Button*createButton()override

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论