在C++中若使用全局变量可以在变量前加::
eg:
#include <iostream>
using namespcae std;
int x;
int main(){
int x=1;
cout<<"local x "<<x<<endl;
cout<<"global x "<<::x<<endl;
return 0;
}
不带参数的宏替换
const double pi=3.1415926
#define pi 3.14
带参数的宏替换
inline double fun(a,b) {return a+b;}
#define MIX(a,b) ((a)*(b) + (b))
常对象
const 类名 对象名
常对象的构造函数是要用带形参复制,而不是在花括号内赋值
常数据成员
常成员函数:可以用来调用输出数据成员,但是不能修改
如果对象中一些数据要只读,那就要用const修饰常数据成员
如果所有成员数据都要只读,那可以用const修饰对象,但这个时候要用const修饰常成员函数,否则不能调用非常成员函数
C++中,类的数据成员加上mutable后,修饰为const的成员函数,就可以修改它了 。
常指针
1.指向对象的常指针
Student stud1(10, 78.5);
Student* const p = &stud1; //不能修改常指针,常指针在程序运行中始终指向一个对象,常指针还不能指向常对象 这个是指向对象
2.指向常对象的指针
const Student stud1(10, 78.5);
const Student *p = &stud1;
静态成员函数
用静态成员函数只能直接访问静态成员,不能直接访问非静态成员
静态成员函数定义:
static 类型 成员函数(形参表){...}
友元
通过友元访问别的类的私有成员,友元不是成员函数,不属于类
破坏封装性,尽量少使用
friend 类型 类1::成员函数 //这种是在一个类中声明一个友元函数,可以在这个类中调用别的类成员
friend 类型 函数y(类2 &对象) //这种可以用普通函数输出类的数据成员
class Time{
public:
Time(int a,int b):x(a),y(b){}
friend void display(Time &){} //通过这个友元函数,可以在外部写一个函数 也可以调用类内的数据成员
friend void Date::display(Date &){} //这个就是调用别的类的成员函数
private:
int x;int y;
}
void display(Time time){ //这个函数是全局的依然可以调用类内的private数据 就是依靠友元
cout<<time.x<<" "<<time.y;
}