C++中的一些知识
一 C++中的引用和指针的区别
1 引用是变量的别名 必须初始化 指针没有强制要求
2 引用在初始化引用了一次后 不可以在引用别的 指针还可以被赋值其他的
3 指针需要解引用 但是引用是编译器自己处理
4 指针可以是NULL 引用不可以是NULL
5 引用在C++中用的更多 主要原因如下
1.输出型参数。
2.减少拷贝,提高效率。
6 引用和指针都一样 都是指向的同一块空间 通过引用和指针改变都可以改变原来的数据
int a = 10;
int &b = a;//b就是a的引用
b = 1;
cout << b << endl;//输出结果是1
cout << a << endl;//输出结果也是1
二 友元 friend
通过在类中的声明 声明前加一个friend 就可以在访问类中的私有的成员变量
class cc
{
//在类里声明 在声明前加个friend 类外函数就可以访问类中的私有的成员变量
friend void abc(cc* cc);
public:
cc()
{
public_room = "客厅";
private_room = "卧室";
}
public:
string public_room;
private:
string private_room;
};
//全局函数
void abc(cc *cc)
{
cout << "全局函数 正在访问 : " << cc->public_room <<endl;
cout << "全局函数 正在访问 : " << cc->private_room <<endl;
}
void test4()
{
cc c1;
abc(&c1);//这样可以正常访问
}
三 const的使用
1 const修饰的变量或者对象不可改变 但是mutable关键字可以修改
2 const修饰的函数 叫常函数 对象在调用这个函数的时候状态会被保护 数据不被改变 在常函数内 对象的数据无法被改变 除非加mutable关键字
#include <iostream>
using namespace std;
class a
{
public:
a(){}
void function() const//常函数
{
this.name = "zhuzhu";//这是错误的 因为这是常函数 对象的数据无法被修改
this.age = 10;//这里可以被修改因为加了mutable关键字
}
string name;
mutable int age;
};
int main()
{
system("pause");
return 0;
}
3 常对象
class a
{
public:
a(){}
void function() const//常函数
{
this.name = "zhuzhu";//这是错误的 因为这是常函数 对象的数据无法被修改
this.age = 10;//这里可以被修改因为加了mutable关键字
}
void fun()
{
}
string name;
mutable int age;
};
int main()
{
const a a1;
a1.name = "zhuzhu";//这是错误的 常对象的数据是不可更改的
a1.age = 10;//这是可以的 因为加了mutable关键字 可以更改
a1.function();//常对象只能访问常函数
a1.fun();//无法访问
}