C++编程实例100篇

  • 更新时间:
  • 6055人关注
  • 点击下载

这是一个不错的C++类学习资源,由伊梦影提供,主要知识点是关于C++编程实例、c++实例大全、C++的内容,已被941人关注,同类资源中评分为9.3分。

资源详情相关推荐
  • 大小:845 KB
  • 类别:C++
  • 格式:PDF
  • 编辑:钟怡金
  • 热度:878
  • VC++编程技术与难点剖析
  • 《小学生C++创意编程》电子资源
  • 小学生C++趣味编程
  • C++语言99个常见编程错误
  • 深入实践C++模板编程
  • C++ 是一种中级语言,它是由 Bjarne Stroustrup 于 1979 年在贝尔实验室开始设计开发的。C++ 进一步扩充和完善了 C 语言,是一种面向对象程序设计语言。C++ 可运行于多种平台上,如 Windows、MAC 操作系统以及 UNIX 的各种版本。

    《C++编程实例100篇》,VC++ 实用编程100个实例的源代码,源码爱好者提供多路高速下载,源码实例包含界面编辑、硬件检测、文件操作、算法计算、图形绘制等等,大部分都属底层编程,有的还有一定难度,初学者可以参考阅读一下。

    精选笔记:简要介绍C++编程中的友元函数和友元类

    14小时38分钟前回答

    一个类中可以有 public、protected、private 三种属性的成员,通过对象可以访问 public 成员,只有本类中的函数可以访问本类的 private 成员。现在,我们来补充介绍一个例外——友元(friend)。

    fnend 的意思是朋友,或者说是好友,与好友的关系显然要比一般人亲密一些。有的家庭可能会这样处理:客厅对所有来客开放,而卧室除了本家庭的成员可以进人以外,还允许好朋友进入。在C++中,这种关系以关键宇 friend 声明,中文多译为友元。友元可以访问与其有好友关系的类中的私有成员,友元包括友元函数和友元类。如果您对友元这个名词不习惯,可以按原文 friend 理解为朋友即可。
    友元函数

    在当前类以外定义的、不属于当前类的函数也可以在类中声明,但要在前面加 friend 关键字,这样就构成了友元函数。友元函数可以是不属于任何类的非成员函数,也可以是其他类的成员函数。

    友元函数可以访问当前类中的所有成员,包括 private 属性的。

    1) 将普通函数声明为友元函数。

    #include<iostream>
    using namespace std;
    class Student{
    private:
     char *name;
     int age;
     float score;
    public:
     Student(char*, int, float);
     friend void display(Student &); //将display声明为友元函数
    };
    Student::Student(char *name, int age, float score){
     this->name = name;
     this->age= age;
     this->score = score;
    }
    //普通成员函数
    void display(Student &stu){
     cout<<stu.name<<"的年龄是 "<<stu.age<<",成绩是 "<<stu.score<<endl;
    }
    int main(){
     Student stu("小明", 16, 95.5f);
     display(stu);
     return 0;
    }
    

    运行结果:

    小明的年龄是 16,成绩是 95.5

    请注意 display 是一个在类外定义的且没有使用 Student 作限定的函数,它是非成员函数,不属于任何类,它的作用是输出学生的信息。如果在 Student 类中未声明 display 函数为 friend 函数,它是不能引用 Student 中的私有成员 name、age、score 的。大家可以亲测一下,将上面程序中的第11行删去,观察编译时的信息。

    现在由于声明了 display 是 Student 类的 friend 函数,所以 display 可以使用 Student 中的私有成员 name、age、score。但注意在使用这些成员变量时必须加上对象名,不能写成:

    cout<<name<<"的年龄是 "<<age<<",成绩是 "<<score<<endl;


    因为 display 不是 Student 类的成员函数,默认不能使用 Student 类的成员,必须指定要访问的对象。

    2) 将其他类的成员函数声明为友元函数
    friend 函数不仅可以是普通函数(非成员函数),还可以是另一个类中的成员函数。请看下面的例子:

    #include<iostream>
    using namespace std;
    class Address; //对Address类的提前引用声明 
    //声明Student类
    class Student{
    private:
     char *name;
     int age;
     float score;
    public:
     Student(char*, int, float);
     void display(Address &);
    };
    //声明Address类
    class Address{
    private:
     char *province;
     char *city;
     char *district;
    public:
     Address(char*, char*, char*);
     //将Student类中的成员函数display声明为友元函数
     friend void Student::display(Address &);
    };
    Address::Address(char *province, char *city, char *district){
     this->province = province;
     this->city = city;
     this->district = district;
    }
    //声明Student类成构造函数和成员函数
    Student::Student(char *name, int age, float score){
     this->name = name;
     this->age= age;
     this->score = score;
    }
    void Student::display(Address &add){
     cout<<name<<"的年龄是 "<<age<<",成绩是 "<<score<<endl;
     cout<<"家庭住址:"<<add.province<<"省"<<add.city<<"市"<<add.district<<"区"<<endl;
    }
    int main(){
     Student stu("小明", 16, 95.5f);
     Address add("陕西", "西安", "雁塔");
     stu.display(add);
     return 0;
    }
    

    运行结果:

    小明的年龄是 16,成绩是 95.5
    家庭住址:陕西省西安市雁塔区

    在本例中定义了两个类 Student 和 Address。程序第 26 行将 Student 类中的成员函数 display 声明为友元函数,由此,display 就可以访问 Address 类的私有成员变量了。

    两点注意:
    ① 程序第4行对Address类进行了提前声明,是因为在Address类定义之前、在Student类中使用到了它,如果不提前声明,编译会报错,提示"Address" has not been declared。类的提前声明和函数的提前声明是一个道理。

    ② 程序中将 Student 类的声明和定义分开了,而将 Address 放在了中间,是因为 Student::display() 函数体中用到了 Address 类的成员,必须出现在 Address 类的类体之后(类体说明了有哪些成员)。

    这里简单介绍一下类的提前声明。一般情况下,类必须在正式声明之后才能使用;但是某些情况下(如上例所示),只要做好提前声明,也可以先使用。

    但是应当注意,类的提前声明的使用范围是有限的。只有在正式声明一个类以后才能用它去创建对象。如果在上面程序第4行后面增加一行:

    Address obj; //企图定义一个对象


    会在编译时出错。因为创建对象时是要为对象分配内存空间的,在正式声明类之前,编译系统无法确定应该为对象分配多大的空间。编译器只有在“见到”类体后(其实是见到成员变量),才能确定应该为对象预留多大的空间。在对一个类作了提前引用声明后,可以用该类的名字去定义指向该类型对象的指针变量或对象的引用变量(如在本例中,定义了Address类对象的引用变量)。这是因为指针变量和引用变量本身的大小是固定的,与它所指向的类对象的大小无关。

    请注意程序是在定义 Student::display() 函数之前正式声明 Address 类的。这是因为在 Student::display() 函数体中要用到 Address 类的成员变量 province、city、district,如果不正式声明 Address 类,编译器就无法识别这些成员变量。

    ③ 一个函数可以被多个类声明为“朋友”,这样就可以引用多个类中的私有成员。
    友元类

    不仅可以将一个函数声明为一个类的“朋友”,而且可以将整个类(例如B类)声明为另一个类(例如A类)的“朋友”。这时B类就是A类的友元类。

    友元类B中的所有函数都是A类的友元函数,可以访问A类中的所有成员。在A类的类体中用以下语句声明B类为其友元类:

    friend B;


    声明友元类的一般形式为:

    friend 类名;

    关于友元,有两点需要说明:
    友元的关系是单向的而不是双向的。如果声明了 B类是A类的友元类,不等于A类是B类的友元类,A类中的成员函数不能访问B类中的私有数据。
    友元的关系不能传递,如果B类是A类的友元类,C类是B类的友元类,不等于 C类是A类的友元类。

    在实际开发中,除非确有必要,一般并不把整个类声明为友元类,而只将确实有需要的成员函数声明为友元函数,这样更安全一些。

    相关声明:

    C++编程实例100篇下载资源由用户 隗文栋 于 2021-10-07 10:26:46 分享至百度网盘。仅供想学习C++的网友交流使用,专题参考:C++,

    相关资源

    • Google C++编程风格指南

      Google C++编程风格指南

      Google C++编程风格指南 是一套Google C++ 风格指南中文版,编码规范,中文标准,由网友新整理的Google代码规范,方便大家学习使用,可以节省大家整理时间,需要的朋友可下载试试! 本指南的目的是通过详细阐述在C++编码时要怎样写、不要怎样写来规避其复杂性。这些规则可在允许代码有效使用C++语言特性的同时使其易于管理。 风格,也被视为可读性,主要指称管理C++代码的习惯。使用术语风格有点用词不当,因为这些习惯远不止源代码文件格式这么简

      大小:1.66 MBC++编程

      立即下载
    • Android C++高级编程:使用NDK

      Android C++高级编程:使用NDK

      《移动开发经典丛书:Android C++高级编程:使用NDK》 提供了移植、开发以及利用Android平台上的C++和其他原生代码所需要的知识和技能,以便于运行图形化的高级应用和更复杂的原生应用。 内容

      大小:82.7 MB高级编程

      立即下载
    • C++编程思想(第2卷)(实用编程技术)

      C++编程思想(第2卷)(实用编程技术)

      C++ 编程思想 第二版(第2卷实用编程技术) 作者:埃克尔 出版时间:2006 《C++编程思想(第2卷)(实用编程技术)》介绍C++实用的编程技术和最佳的实践方法,深入探究了异常处理方法和异常安全设计;介绍C++的字符串、输入输出流、STL算法、容器和模板的现代用法,包括模板元编程;解释多重继承问题的难点,展示RTTI的实际使用,描述了典型的设计模式及其实现,特别介绍被认为是标准C++下一版特征之一的多线程处理编程技术,并提供了最新的研究成果。

      大小:30.94MBC++编程

      立即下载
    • C++标准模板库编程实战

      C++标准模板库编程实战

      《C++标准模板库编程实战》 介绍最新的C++14标准的API、库和扩展,以及如何将它们运用到C++14程序中。在书中,作者Ivor Horton 则阐述了什么是STL,以及如何将它们应用到程序中。我们将学习如何

      大小:130.9 MBC++编程

      立即下载
    • C++编程思想(第二版 第1卷 标准C++导引)

      C++编程思想(第二版 第1卷 标准C++导引)

      C++编程思想(第二版 第1卷 标准C++导引) 作者:(美)Bruce Eckel著;刘宗田等译 出版时间:2005 丛编项:计算机科学丛书 《C++编程思想》(第1卷)(第2版)是C++领域一本权威的著作,书中的内容、讲授方法、选用例子和跟随练习既适合课堂教学,又适合读者自学。无论是高等院校计算机及相关专业的学生,还是业界的专业人员,以及广大的计算机爱好者,都可从阅读《C++编程思想》(第1卷)(第2版)中获得宝贵的收益。第2版与第1版相比,在章节安排

      大小:30.44MBC++编程

      立即下载
    • C++编程规范:101条规则、准则与最佳实践

      C++编程规范:101条规则、准则与最佳实践

      C++编程规范-101条规则、准则与最佳实践 作者:HerbSutterAndreiAlexandrescu 出版时间:2006 本书涵盖了C++程序设计的方方面面,包括设计和编码风格、函数、操作符、类的设计、继承、构造与析构、赋值、名字空间、模块、模板、泛型、异常、STL容器和算法等。书中对每一条规范都给出了言简意赅的叙述,并辅以实例说明;书中还给出了从类型定义到错误处理等方面大量的C++最佳实践,包括许多最新总结出的和标准化的技术,即使使用C++多年的程序员也会从中

      大小:36.01 MBC++

      立即下载
    • Visual C++/Turbo C串口通信编程实践

      Visual C++/Turbo C串口通信编程实践

      Visual C++/Turbo C串口通信编程实践 作者:龚建伟,熊光明编著 出版时间:2004 本书从编程实践的角度详细介绍了Windows环境下和DOS环境下的串口通信的基本方法,并根据当前串口与网络结合发展的趋势,介绍了串口与网络TCP/IP、远程控制与监测相结合的一些解决方案和编程要点。由于编程步骤详尽,初学Visual C++/C(甚至是以前完全没有接触过Visual C++)的读者也能很快编写出Visual C++的串口通信程序。本书配光盘,书中实例源程序和相关资料可在对应章节的文

      大小:15.68MBVisual C++

      立即下载

    学习笔记

    18小时27分钟前回答

    简介C++编程中的运算符重载

    所谓重载,就是重新赋予新的含义。函数重载就是对一个已有的函数赋予新的含义,使之实现新功能,因此,一个函数名就可以用来代表不同功能的函数,也就是”一名多用”。 运算符也可以重载。实际上,我们已经在不知不觉之中使用了运算符重载。例如,大 家都已习惯于用加法运算符”+”对整数、单精度数和双精度数进行加法运算,如5+8, 5.8 +3.67等,其实计算机对整数、单精度数和双精度数的加法操作过程是很不相同的, 但由于C++已经对运算符”+”进行了重载,所以就能适用于int, float, doUble类型的运算。 又如”“是C++的位运算中的位移运算符(左移),但在输出操作中又是与流对 象cout 配合……

    24小时23分钟前回答

    详解C++编程中的静态成员与可变数据成员

    静态成员 类可以包含静态成员数据和成员函数。当数据成员被声明为“静态”时,只会为类的所有对象保留一个数据副本。 静态数据成员不是给定的类类型的对象的一部分。因此,静态数据成员的声明不被视为一个定义。在类范围中声明数据成员,但在文件范围内执行定义。这些静态类成员具有外部链接。下面的示例阐释了这一点: // static_data_members.cppclass BufferedOutput{public: // Return number of bytes written by any object of this class. short BytesWritten() { return bytecount; } // Reset the counter. static void ResetCount() { bytecount = 0; } // Static member declaration. static long bytecount;};// Define bytecount in file scope.long BufferedOutput::bytecount;int main()……

    3小时8分钟前回答

    详解C++编程中向函数传递引用参数的用法

    引用类型的函数参数 向函数传递引用而非大型对象的效率通常更高。 这使编译器能够在保持已用于访问对象的语法的同时传递对象的地址。 请考虑以下使用了 Date 结构的示例: // reference_type_function_arguments.cppstruct Date{short DayOfWeek;short Month;short Day;short Year;};// Create a Julian date of the form DDDYYYY// from a Gregorian date.long JulianFromGregorian( Datelong JDate = 0;// Add in days for months already elapsed.for ( int i = 0; i GDate.Month - 1; ++i )JDate += cDaysInMonth[i];// Add in days for this month.JDate += GDate.Day;// Check for leap year.if ( GDate.Year % 100 != 0 GDate.Year % 4 == 0 )JDate++;// Add in year.JDate *= 10000;JDate += GDate.Year;return JDate;}int main(){} 前面的代码显示通过引用传递……