C++知识点7——不常用语法精解

常量相关

  • 常量无外号
  • 形参是引用,实参不能是常量

enum的实际操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<iostream>
#include<cmath>
using namespace std;

int main(){
enum week {fir,se,we,th=4,fri,six,ri};

cout<<fir<<endl;//0
cout<<se<<endl;//1
cout<<we<<endl;/* 2,说明如果前面没有改动,前面的代表的数字还是不变的。*/
cout<<th<<endl;//4
cout<<fri<<endl;//5
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<iostream>
#include<cmath>
using namespace std;

int main(){
enum week {fir,se,we,th=4,fri,six,ri};
week w1;
w1=fri;
w1=(week)2;
int k;
k=fir;
cout<<k<<endl;//0
return 0;
}
  • struct所占内存大小:所有数据的大小之和。
  • union所占内存大小:数据大小中最大的一个。
  • union缺点:可能会产生混乱,其内部无保护机制。
  • struct可以整体赋值:stu1=stu;

成员初始化列表的规则

1
2
3
4
class A;
A ( )/* const类型的形参只能放在这里 */{}
A ( )/* 内嵌对象的初始化只能放到这里 */{}
A ( )/* private中的int char 即普通型可以放在这里,也可以放到函数体里面 */

类的友元

友元关系提供了不同类或对象的成员函数之间、类的成员函数与一般函数之间进行数据共享的机制。
如果友元函数是一般函数或类的成员函数,称为友元函数;如果友元是一个类,则称为友元类,友元类的所有成员函数都自动称为友元函数。

友元函数

作用:虽然他不是本类的成员函数,但是在它的函数体中可以通过对象名访问类的私有和保护成员。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include<iostream>
#include<cmath>
using namespace std;
class Point{
public:
Point(int x=0,int y=0):x(x),y(y){}
int getX(){
return x;
}
int getY();
friend float dis(Point &p1,Point & p2);
private:
int x,y;
};
Point::getY(){
return this->y;
}
float dis(Point &p1,Point &p2){
double x=p1.x-p2.x;
double y=p1.y-p2.y;
return sqrt(x*x+y*y);
}
int main(){
Point myp1(1,1),myp2(4,5);
cout<<dis(myp1,myp2)<<endl;
return 0;
}

友元类

同友元函数一样,一个类可以将另一个类声明为友元类。若A类为B类的友元类,则A类所有的成员函数都是B类的友元函数,都可以访问B类的私有和保护成员。
语法:

1
2
3
4
5
6
class B
{
...
friend class A;/*A是B的友元类,可以访问B的成员函数和私有和保护成员*/
...
}

注意:

  • 友元关系不能传递
  • 友元关系是单向的
  • 友元关系是不被继承的

    引用

    定义:特殊类型的变量,可以被认为是另一个变量的别名
    会直接对原内存的数据进行更改。
  • 引用必须要被初始化(如果ra是a的外号,那么它就不能成为b的外号)
  • 引用在c++中就是一个外号,引用就是一种共享。
  • 常量无外号,注意:常量是有const关键字的,或者直接是一个数字

    内联函数

    内联函数并不是在调用时发生控制转移,而是在编译时将函数体嵌入在每一个调用处
    调用方式是在平常声明函数的语法前加上inline
  • 类内的足够简单并且不会发生异常错误的都是内联函数
  • 成为内联函数足够简单的要求:没有switch…case语句,内部没有循环

    作用域

    作用域是一个标识符在程序正文中有效的区域
  • 函数原型作用域
    在函数原型声明时形式参数的作用范围就是函数原型作用域
    所以可以在声明函数原型时只写类型,不写标识符
  • 局部作用域
    函数形参列表中形参的作用域,从形参列表中的声明处开始,到整个函数体结束之处为止
    函数体内声明的变量,其作用域从声明处开始,一直到声明所在的块结束的大括号为止(一对大括号)
    具有局部作用域的变量也称为局部变量
  • 类作用域(类内可见)
    页数:p147
  • 命名空间作用域(作用范围最大)
    命名空间>类作用域>块作用域
    也叫全局作用域不在任何一个{}内

    可见性

    程序运行到某一点,能够引用到的标识符,就是该出可见的标识符