c++函数重载、内联函数、类、友元

cin>>a>>b,键盘输入时,是以换行符或者空格作为切分的。遇到换行符或者空格,则认为是下个变量的值。

c++与c的不同

  • 基本数据类型多了 bool类型
  • 构造数据类型多了 引用类型:给变量取个别名,定义的时候就要初始化。就是一个变量两个名字。
  • 抽象数据类型多了 类类型

函数重载:一个函数定义后被不同形式初始化调用

  • 函数的形参在声明的时候可以初始化(也就是默认形参),当重载的时候如果不给赋值那就用默认值初始化
  • 函数的形参,在调用时可以省略(认为是用默认值初始化),但是有初始化的形参左边不能再有默认值
  • 编译器区分函数是用形参个数、形参类型及函数名来进行最优选择的。

内联函数:inline type (){}

  • 作用其实就是把宏定义扩展到可以整个函数替换,优点是可以进行参数类型检查,宏定义则不可以
  • 调用内联函数后的具体执行:首先计算形参的值,然后检查形参值是否符合内联函数形参类型,然后整个函数体替换进行运算
  • 用处:为了节省调用开销。一般只对那些频繁调用而且函数体很小只有几条语句的才会用内联函数
  • 内联函数不能用switch和循环语句,否则会当成普通函数处理。

宏定义和const常量区别:

  • 宏定义只是简单的替换,定义的符号常量在运行时不占内存空间
  • const常量占内存空间,就是加了只读限制的变量。

函数调用:

  • C语言有传值传递指针:传指针也是给形参和实参的连接打开通道。传值方法中形参空间和实参空间是完全隔离的。传给形参的只是实参的拷贝。
  • C++有传值和更好的传递引用
  • 传递引用本质是形参就是实参的别名,形参就是实参

类:类是一种数据类型,一种对事物的高级抽象,包括数据抽象行为抽象

  • 数据抽象就是定义一些数据变量
  • 行为抽象就是将行为抽象成函数,来定义一些函数。

对于类的定义:两种方法

  1. 直接在类内定义变量和函数
  2. 类内仅声明变量和函数,然后在类外用  类名::函数名 (){}  继续定义。,说明这个函数是哪个类的行为抽象。
  • 创建类对象(类实例)的方法,类名 对象名;
  • 类可以访问隐私,public下的就是给你在类外调用的权限。provate和protected则在类外无法访问,只能通过类内调用(间接的)。因此实际上public就是类的对外接口。  “无法访问”的意思就是:看到都不行,用到更不行。
  • 类内不用权限修饰的对象,默认是private私有属性。
  • 数据封装是一个相对的概念,在类内这些数据对象和行为函数都是相互可见的,没有隐私。
  • 类内函数通过类内数据进行赋值时,本质上通过本类对象的this指针实现,this总是指向当前的被调用对象。如this->value =v;这个this就是指向本类对象和python类中的self是一样的。
  • 类对象也可以向变量引用那样起别名,对象引用。

如何解决类对象的自动初始化?——构造函数

  1. 构造函数是指在类内的一个 函数名和类对象名 完全相同的函数,是一种特殊的行为函数。
  2. 通过构造函数的初始化有两种形式:赋值和参数列表。       参数列表的格式: (实参列表)(待初始化形参列表){}
  3. 通过不同参数调用类型的构造函数的重载,也实现了类的不同形式的调用。只要有此类型的构造函数,就可以通过此方法实例化类对象。

析构函数:用来释放清理构造函数的空间。形式:~classname();

私有:类的外部不能调用

static:静态,只能类内声明,类外定义和初始化。

友元函数:打破类内的私有成员(数据变量或函数)不能被外部直接访问的规则。 正常情况只能通过public公共接口间接访问。

  • 实现方法:在类内定义私有成元函数时,前面加上friend.例:
  • class Point
  • {
  • friend float Distance(Point A,Point B);
  • };
  • 1.声明成友元函数的类的私有函数 可以在类外直接调用,就像公有函数一样。如int main{ Distance(Point A,Point B)};
  • 2.友元函数可以直接访问类的所有私有成员
原文地址:https://www.cnblogs.com/Henry-ZHAO/p/12725205.html