this:
this指针是系统自动生成的隐藏式指针
不是对象的一部分,是类的作用域内的
类的普通成员函数访问普通成员变量时,this指针总是指向调用者对象
通常是省略的,当成员变量与传入形参名字一样时,最好使用this指针
int num;
void setVal(int num) {
//num = num;
this->num = num;
std::cout << "num = " << num << std::endl;
std::cout << "this->num = " << this->num << std::endl;
}
static:
static成员:在C++类中,证明成员时,加上static关键字
静态成员分为静态函数成员与静态数据成员
没有this指针,也不能使用普通成员变量;static成员在class类之前,生命周期比类长,不属于此类
单例:创建一个只能实例化一个对象的类(私有构造函数、私有拷贝构造函数、私有静态类对象、返回值为类对象的公有静态类成员函数)
class Stu
{
public:
Stu();
~Stu();
//static成员在class类之前,生命周期比类长
static int data;//所有Stu的对象使用一个data的内存
static void test();
private:
};
Stu::Stu()
{
}
Stu::~Stu()
{
}
int Stu::data = 99;
void Stu::test()
{
std::cout << "test ===================== " << std::endl;
}
Stu obj1;
Stu obj2;
std::cout << "data11111 = " << obj1.data << std::endl;
obj1.data = 1234;
std::cout << "data11111 = " << obj1.data << std::endl;
std::cout << "data2222222 = " << obj2.data << std::endl;
Stu::data = 7465756;
std::cout << "data11111 = " << obj1.data << std::endl;
std::cout << "data2222222 = " << obj2.data << std::endl;
std::cout << "data2222222 = " << Stu::data << std::endl;
Stu::test();
obj1.test();
obj2.test();
const:
常量数据成员:成员函数列表给常量赋值
常量成员函数:不能对类的数据成员作修改(只看不修改),只能修改静态成员
class A
{
public:
A();
~A();
int dd;
const int fd;
void fun() const
{
std::cout << "const fun111111 = " << std::endl;
}
void fun2() const;
static int dsfds;
private:
};
int A::dsfds = 0;
A::A():fd(65)
{
}
A::~A()
{
}
void A:: fun2() const
{
std::cout << "const fun 222222= " << std::endl;
dsfds = 56;
std::cout << "const fun 222222==== dsfds========" << dsfds <<std::endl;
this->dsfds = 9999;
std::cout << "const fun 222222==== dsfds========" << this->dsfds << std::endl;
}
A myA;
std::cout << "myA.fd = " << myA.fd << std::endl;
myA.fun();
myA.fun2();
firned:
封装是类的特性之一,友元是打破封装的一种手段(可以访问private变量)
友元函数(可以申明类的任何属性里面)、友元类(可以创建友元对象)
友元关系不继承
class B
{
public:
B();
~B();
friend void func(B obj);
int k = 4;
private:
int x =7;
protected:
int y = 78;
};
B::B()
{
}
B::~B()
{
}
void func(B obj) {
std::cout << "friend ===== x= " << obj.x << ",k = " << obj.k << ",y = " << obj.y << std::endl;
obj.x = 943;
obj.k = 111;
obj.y = 657;
std::cout << "friend2222 ===== x= " << obj.x << ",k = " << obj.k << ",y = " << obj.y << std::endl;
}
B myB ;
func(myB);
std::cout << "myB.k = " << myB.k << std::endl;