C++
Andrew_Qian
stay hungry,stay foolish.
展开
-
混合使用cin>>和cin.get()的问题
1、cin>>和cin.get()如下示例代码会到导致cin.get()语句被跳过,不等用户输入数据。char ch; int number; cout << "Enter a number: ”;cin >> number; // 读取整数cout << "Enter a character: ";ch = cin.ge...原创 2019-04-10 20:46:36 · 3613 阅读 · 0 评论 -
c++(模板)
一、函数模板函数模板属于类属,使用模板可以实现用一个函数体就可以处理不同的数据类型。 函数模板并不是一个真正意义上的函数,它仅仅是对函数结构外观的声明,本身并不占用内存,只有当编译器遇到模板函数的调用时,才会在内存中创建一个函数实例。 函数模板有点类似于重载,但是比重载更加方便。 c++不但支持函数重载,也支持函数模板重载。与函数重载类似,模板重载也是根据形参列表进行区分。考虑如下程序...原创 2019-05-02 23:42:38 · 762 阅读 · 0 评论 -
c++(重载单目运算符++)
因为单目运算符仅作用于当前对象,因此,当将这些运算符重载为函数成员时,就不再需要参数。1、重载前置运算符(++obj)在feetinches类中添加如下运算符重载函数成员: //重载前置++运算符 FeetInches operator++() { ++this->inches; //前置运算符,先加再返回 this->...原创 2019-04-23 12:53:58 · 3821 阅读 · 2 评论 -
c++(继承——二)
一、子类与基类构造函数的关系 如果子类和基类都有构造函数和析构函数, 那么当实例化子类的对象的时候,先调用基类的构造,然后调用子类的构造;当程序结束时,顺序相反,先调用子类的析构函数,再调用基类的析构函数。 当基类的构造函数是默认(缺省)的时候,他们的调用是自动完成的,不需要在子类中显示的调用基类的构造函数。这也叫做隐式调用。 但是当基类的构造函数带有参数的时候,就需...原创 2019-04-28 15:06:58 · 232 阅读 · 0 评论 -
c++(类模板的继承)
根据上一篇博客中举的数组的例子,这篇博客就对其进行继承,再继承一个模板类出来。下面程序中的searcharray模板就继承了之前的freearray模板类,然后在他的基础上实现对特定数组元素的查找操作://此模板继承自freearraytemplate <class T>class SearchArray:public FreeArray<T>{publi...原创 2019-05-03 22:05:53 · 12862 阅读 · 0 评论 -
c++(关系运算符、流操作符与类型转换运算符重载)
1、重载关系运算符与双目运算符的重载实现方式相似,唯一的区别是关系运算符重载函数的返回值是一个布尔值(true或者false)下面是大于号(>)的重载函数: //重载关系运算符> //就是对两个成员变量进行一一对比 bool operator>(const FeetInches &right) { if(this...原创 2019-04-24 19:10:57 · 749 阅读 · 0 评论 -
c++(虚函数、纯虚函数和抽象类)
目录一、虚函数1.1问题引入1.2虚函数二、纯虚函数三、抽象类1.1 注意:1.2程序举例一、虚函数1.1问题引入c++在默认情况下,对函数成员的调用实施的是静态连编(staticbinding),也叫静态绑定。此时,如果子类中的函数F覆盖了基类的函数F,那么基类中的其他函数调用函数F的时候,调用的仍然是基类中的这个函数F,而不是子类中覆盖...原创 2019-04-29 20:23:03 · 1902 阅读 · 0 评论 -
c++(string类型)
c++对于字符串的处理提供了两种方法: 按照c中的字符数组处理。 按照string类型的对象处理。 string类是一种抽象数据类型(ADT),不是内嵌的、原子数据类型;和int、float、double等不同。 与字符数组相比,使用string类型更加简单、直观,可以像处理其他类型的变量一样进行处理。考虑如下程序,了解string对象的定义和使用:#include ...原创 2019-05-05 22:04:47 · 4491 阅读 · 0 评论 -
c++(重载[]运算符)
c++支持重载[]符,这样就可以像操作普通数组一样操作对象数组。下面创建一个intarray数组类,实现对数据下标的越界检查。class IntArray{private: int *aptr; int arraySize; void memError(); //处理内存分配错误 void subError(); //处理下标越界pub...原创 2019-04-25 17:50:32 · 1572 阅读 · 0 评论 -
c++(基类指针、多重继承与多继承)
一、基类指针一般的,如果定义一个指向基类类型的指针,那么这种类型的指针具有如下特性:指向基类对象的指针可以指向其子类对象。 如果子类覆盖了其基类中的函数成员,但通过基类指针所访问的成员仍然是基类的成员,而不是子类的成员。比如基类BaseClass拥有函数F,其子类ChildClass中覆盖了函数F,那么如下语句将仍然调用A的函数F:BaseClass *aptr; //基类...原创 2019-04-30 19:14:39 · 6590 阅读 · 0 评论 -
c++(重载双目运算符)
重载加法运算符,实现对象的直接加法运算。例如,下面这个feetinches类:class FeetInches{private: int feet; int inches; //对feet和inches的值进行调整 void simplify();public: FeetInches(int f=0, int i=0) { ...原创 2019-04-18 22:38:55 · 2368 阅读 · 1 评论 -
c++(继承)
c++允许在当前类的基础上构造新类,新类就继承了当前类的所有数据成员和函数成员,构造和析构函数除外。已有类叫做:父类、基类;新产生的类叫做子类、派生类。继承语法:class Child:public Father{ ...}上面这句话就是Child类继承了Father类。说明:public在此叫做继承修饰符:它决定了能够在子类中访问基类的成员。 但是任何情况...原创 2019-04-27 21:46:40 · 178 阅读 · 0 评论 -
c++(异常)
为了保证程序具有一定的容错能力,在出现意外的情况下不至于出现灾难性的后果,因此在程序中最好要考虑各种意外,并给出处理方法。异常就是程序中的突发性事件。设计异常的基本思想:让一个函数在出现了自己无法处理的错误时,抛出(throw)一个异常,然后它的调用者能够处理这些问题。C++之父Bjarne Stroustrup在《The C++ Programming Language》中讲到:...原创 2019-05-01 22:51:03 · 819 阅读 · 0 评论 -
C++(重载,对象数组)
头文件:重载三个构造函数,根据实例化对象传入的参数自动调用。#ifndef RELOAD_H_INCLUDED#define RELOAD_H_INCLUDED#include <string.h>//构造函数的重载class Reload{private: char *myName; int myAge;public: //重载三...原创 2019-04-12 11:57:39 · 899 阅读 · 0 评论 -
c++(友元函数)
友元函数要点 友元函数不是类的成员函数,但是仍可以访问该类的私有成员。友元函数可以是一个外部函数,也可以是另一个类的成员函数。 当类A中的某个函数成员需要访问类B中的私有成员的时候,首先需要在类A的头文件中进行对类B的超前使用说明,这是必不可少的。其次需要在类B中将A的函数声明为友元函数。 友元函数的声明就是在函数原型前面加上friend。 可以将一个类定义为另...原创 2019-04-15 22:57:13 · 4369 阅读 · 2 评论 -
c++学习(类、内联、构造、析构)
分文件组织工程结构:1、一个包含类定义的头文件,文件名就是自己的类名#ifndef RECTANGLE_H_INCLUDED#define RECTANGLE_H_INCLUDEDclass Rectangle{private: float width; float length; float area; char *boxName; ...原创 2019-04-09 16:29:42 · 518 阅读 · 0 评论 -
c++(抽象数组,实现对下标的越界检查)
1、首先在头文件中定义一个抽象数组类#ifndef INTARRAY_H_INCLUDED#define INTARRAY_H_INCLUDED//创建一个数组类,实现下标的越界检查。class IntArray{private: int list[20]; //判断下标是否有效 bool isValid(int);public: IntArr...原创 2019-04-12 22:17:57 · 1341 阅读 · 0 评论 -
c++(对象赋值与拷贝构造函数)
对象赋值 同一个类的对象之间可以相互赋值,默认情况下,进行的是对象成员之间的复制,也称为【按位复制】或【浅复制】。 当类的数据成员中没有指针类型的变量时,直接对两个对象进行赋值没有问题。 但是一旦类的数据成员含有指针变量,那么直接对这两个对象进行赋值操作之后,这两个对象的指针都将指向同一块内存。这时,一旦其中一个对象生存期结束,释放该内存,那么另一个对象的指针就变成了野指...原创 2019-04-16 21:45:13 · 5646 阅读 · 2 评论 -
c++(数组的排序与查询操作)
1、该数组类的定义和前一篇文章中基本一样,只是增加了几个成员函数,实现对数组的一些特定的操作。#ifndef INTARRAY_H_INCLUDED#define INTARRAY_H_INCLUDED//创建一个数组类,实现下标的越界检查。class IntArray{private: int list[20]; //判断下标是否有效 bool isVa...原创 2019-04-14 10:12:54 · 4398 阅读 · 0 评论 -
c++(静态数据成员和静态函数成员)
1、静态数据成员用static关键字修饰,在类中声明之后还需要在类外进行定义。//头文件class CharRange{private: static int temp; //类中声明}//源文件#include <iostream>using namespace std;#include "charrange.h"int CharRange...原创 2019-04-14 21:20:23 · 1006 阅读 · 0 评论 -
c++(对象组合)
在C语言中结构体支持嵌套,同样,c++的类也支持嵌套。也就是让某个类的对象作为另一个类的数据成员出现,这就是对象组合。下面的例子是让IntArray类的对象作为Customer类的共有数据成员存在。在这里,IntArray类其实就充当了我们自己定义的一个抽象数据类型,通过各种运算符重载函数,实现对字符串很方便的操作与管理。IntArray类:class IntArray{pr...原创 2019-04-26 16:06:43 · 4175 阅读 · 1 评论 -
c++(运算符重载与this指针)
1、重载赋值运算符 实现将对象A按位赋值给对象B。 例如定义一个person类的赋值运算符重载函数:class Person{private: int age; char *name;public: //省略。。。。 //重载赋值运算符 void operator=(const Person &right) ...原创 2019-04-17 22:27:16 · 3111 阅读 · 0 评论 -
c++(标准模板库STL)
STL是一种泛型编程(genericprogramming)STL提供了一组表示容器、迭代器、函数对象和算法的模板。 面向对象编程关注的是编程的数据方面,而泛型编程关注的是算法。 他们之间的共同点是抽象和创建可重用代码,但是他们的理念截然不同。1、容器(container)容器类是一个与数组类似的单元,但是他是管理序列的类,也是容纳一组对象或对象集的类。 通过容器类提供的成员函数...原创 2019-05-07 22:07:32 · 4561 阅读 · 3 评论