C++的详细学习

C++程序结构

1.C++的输入/输出函数(包括cin和cout)在头文件iostream.h中定义;
2.C++源程序的文件名用.cpp作为扩展名;
3.对函数的声明必须用原型;
C++的输入/输出流
1.C++的输入/输出不仅可以用C的输入/s输出函数,而且可以用C++的输入、输出流cin/cout;
2.“<<”和”>>”是重载运算符,<<用于将其右边的内容输出到屏幕上,>>用于将键盘中输入分一个数送到右边的变量中。
3.C++源程序经过编译器编译成.obj文件,然后经过c++连接器,将目标文件与库文件连接,生成一个扩展名为.exe的执行文件;
4.Cout和插入运算符“<<”一起使用,可以输出整数、实数、字符和字符串。
5.Setw,设置数据流的长度。用于输入时,当输入的字符串长度大于设定长度时,超出部分将被截断;用于输出时,当输出数据的长度小于所设定的长度时,数据将以右对齐方式输出,否则,按原样输出。

引用

1.引用是一种特殊类型的变量,它通常被认为是另一个已经存在的变量的别名。引用的值是相关变量的存储单元中的内容,对引用的操作实际上是对相关变量的操作。定义的格式如下:
a)类型 &引用名 = 变量名
b)Int x = 15,&y=x;//给y赋值,即初始化,使引用y与变量x具有相同的内存单元。
c)y =20;//给y赋值,把x的值变为20;
2.c++使用的主要目的是将引用作为函数的形参,使形参值的改变影响实参值得变化。在c++中,称这种函数调用方式为引用调用或引用传递。
3.C++用const标识符来定义常量,它的作用与#define相似,但比它安全;
4.用const定义整型变量时,关键字int可以省略,例如下面两个是等价的
a)Const int x = 10;
b)Const x = 10;
5.与#define定义的常量不同的是,const定义的常量可以有自己的数据类型,使C++的编译程序可以进行严格的类型检查。

函数的重载

1.函数的重载是指同一个函数名可以对应多个函数的实现。
2.函数重载只能以函数的参数个数或参数的数据类型不同为依据;
3.函数名相同,形参个数和类型也相同,只是函数返回值的类型不同,不能认为是重载函数。编译器不以返回值来区分函数,因此编译时会出现语法错误。
4.C++中允许使用带默认参数的函数,赋予默认值的参数必须放在形参表的最右端。有时候使用带默认参数的函数比用重载函数更方便、灵活。

运算符

1.可以用作用域运算符”::”指定变量的作用域,使其可以访问当前作用域以外的表示符。“::”是一个单目运算符,其右边的操作数是一个全局作用域范围内的标识符。
2.C++使用new和delete进行动态分配内存和释放内存空间。
3.New不需要使用运算符sizeof为不同类型的变量计算所需内存的大小,而是自动为变量分配正确长度的内存空间,如果分配成功,运算符new返回指定类型的一个指针,分配失败返回0;使用格式:
New 类型[初值]
a)New不仅可以为变量分配内存,也可以为数组分配内存。
b)Int *p;
c)P = new int(10);//分配10个字节的内存单元
d)Int *p;p=new int[10];为指针p分配10个元素的整型数组的内存单元;
4.运算符delete,必须用于先前new分配的有效指针,不能用于malloc函数混用。如果使用delete释放的内存空间不是new申请的,可能引起程序运行错误。使用的一般格式为:
a)delete []指针变量
5.const修饰常量,格式为:
a)const 数据类型 常量名 = 初始值;
b)eg:const int k = 10; == #define k 10;

1.一个类可以含有private,protected,public三部分,默认为private。
2.Class rect_area{
private:
float len;
float width;
float area;
};//分号不能少
3.与结构体一样,类定义只说明了产生了一种新的数据类型,系统并没有为该类分配内存空间,要使用该数据类型,还必须定义其对象。
4.对象的定义
i.定义号类之后,在定义类的对象。类名 对象名表
ii.在定义类的同时直接定义类的对象
class 类名{
private:
私有成员数据及函数;
protected:
保护成员数据及函数;
public:
公共成员数据及函数;
}对象名表;
5.类中的变量称为类的数据成员,函数成为成员函数。类的数据成员说明对象的特征,而成员函数决定对象的处理方法。在对象内,只有属于该对象的成员函数才可能存取该对象的数据成员,这样,其他函数就不会无意破坏它的内容,从而达到保护和隐藏数据的效果。
6.类的方法是定义在类的外面实现的,用”::”隔开;
7.类中数据成员的数据类型可以是任意的,但不允许对所定义的数据成员进行初始化。
8.C++中,一般是将类的声明放在一个.h文件中,而把成员函数放在一个与.h文件同名的.cpp文件中。
9.类的私有成员不能为外部函数所使用。
10.在类外定义成员函数时,在函数定义的前面加关键字inline,说明函数为内联函数。内联函数内不允许用循环语句和开关语句,并且内联函数无法递归调用。
11.析构函数也是类中特殊成员函数,与构造函数正好相反,用于释放分配给对象的存储空间,通常可以利用析构函数释放构造函数动态申请。

析构函数

1.析构函数的名称与定义它的类具有相同的名称,只是在类名称前面要加上一个波浪符号(~),析构函数不允许有返回值,与构造函数最大的差别是析构函数不允许带参数,而且也不能重载,因此只能有一个析构函数。
2.析构函数自动调用:
a.当对象定义在一个函数体中,该函数调用结束后,析构函数自动调用。
b.用运算符new为对象分配动态内存后,用delete释放对象时,析构函数被自动调用。
3.构造函数和析构函数的常见用法是在构造函数中用new为变量分配存储空间,在析构函数中用delete释放已分配的空间。

类的友元

1.类的友元,使用友元函数或友元类的成员函数可以访问类的私有成员。
2.类的友元函数在类中进行声明,而在类的范围ie之外进行定义,声明时必须在函数类型前面加上关键字friend。在一个类中,可以利用关键字friend把其他类或非成员函数声明为该类的友元,因此,友元函数u是在该类声明中由关键字friend修饰的非成员函数。
3.如果A类是B类的友元类,那么A类所有成员函数都是B类的友元函数,都可以访问B类的私有和保护成员。友元类的一般定义为:
class B{
friend class A;
}
4.友元类的成员函数可以像友元函数一样访问该类的所有成员。友元类不一定是相互的,如果A是B的友元类,B不一定是A的友元类。当两个类的联系较紧密时,可以将两个类相互定义为对方的友元。
5.C++规定,友元类必须在它被定义之前声明.一个类的友元函数可以维护。
this指针
1.当一个对象调用成员函数时,该成员函数的this指针便指向这个对象。不能通过this指针调用类的友元函数,因为友元函数不属于类的成员,也不能使用this指针存取类的静态成员。
2.this指针是指向一个类的对象的地址,它是C++编译器自动产生而使用的一种隐含指针,它隐含于每一个类的成员函数之中,类成员函数使用this指针来处理对象。this指针指向该成员函数所属类的对象。成员函数访问类中成员变量的格式可以写成:
a)this->成员变量;

重载

1.运算符的重载实质就是函数的重载,重载为类的成员函数和重载为类的友元函数。
2.当运算符重载为类的成员函数时,首先在类定义时使用如下格式声明待重载的运算符
a)类型 operator 运算符(形参表)
b)重载运算符函数:
c)返回值类型 类名称::operator<重载运算符>(形参表)

继承

1.相同的部分定义为一个类,称为基类。在该类的基础上增加新的内容,构造新类称为派生类,新类可以继承基类的所有数据成员和成员函数。
2.定义派生类的一般形式如下:
class 派生类名:[继承方式]基类名
{
派生类新增加的数据成员
派生类新增加的成员函数
}
3.定义派生类时,如果将基类的继承方式指定为private,则基类的public和protected成员都是派生类的private成员;基类的private成员仍然保持private属性,只有基类的成员函数可以引用它。即当继承方式为private时,派生类的对象不能访问基类中以任何方式定义的成员函数。
4.在派生类的定义中只有一个基类名,这种方式叫做单继承。在派生类的定义中可以有多个基类名,这种继承方式称为多继承。定义格式:
a)class 派生类名:[继承方式]基类名表1,基类名表2….
5.基类定义了带有形参数的构造函数,派生类就应该定义构造函数,通过构造函数将参数传递给基类构造函数,以便基类进行初始化时能够得到必要的数据。
6.派生类构造函数的一般语法形式为:
a)派生类名::派生类名(参数总表):基类名1(参数表1),…基类名n(参数n){
派生类新增成员的初始化语句
}
7.析构函数的调用顺序与构造函数的调用顺序刚好相反。

发布了39 篇原创文章 · 获赞 13 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43443900/article/details/102798072
今日推荐