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;