2022-1-4 类
类中的 属性和行为 统一称为成员
属性 又称为 成员属性 成员变量
行为 成员函数 成员方法
一 &&&&&&&封装&&&&&&&
1 圆类
//&&&&&&&&&&&&&&&&&&&&&& 1.封装
// 设计一个圆类,求圆的周长
//周长:2*pi*R
class Circle
{//访问权限
public://属性int m_r;//行为//获取圆的周长double claculateZC(){return 2 * 3.14 * m_r;}
};int main()
{Circle C1;C1.m_r = 10;cout << "zc is " << C1.claculateZC() << endl;return 0;
}
2 学生类
#include <stdio.h>
#include<iostream>
#include<cstring>
#include<cstdio>using namespace std
案例2 :学生类
class Student
{
public:int m_num;string m_name;void Show(){cout << "ID: " << m_num << endl;cout << "name : " << m_name << endl;}void setName(string name){m_name = name;}
};int main()
{Student s1;s1.m_num = 1;s1.setName("zhangsan");s1.Show();Student s2;s2.m_num = 2;s2.m_name = "lisi";s2.Show();return 0;
}
3 访问权限
//访问权限
//三种
//公共权限 成员 类内可以访问 ,类外可以访问
//保护权限 成员 类内可以访问 ,类外不可以访问 ,儿子可以访问父亲的保护内容
//私有权限 成员 类内可以访问 ,类外不可以访问 ,儿子不可以访问父亲的私有内容
所谓不能访问,是指不仅仅不能修改,连调用都不可以
4. struct 和 class 的区别 ,唯一的区别是默认的访问权限是不同的
// struct 和 class 的区别
//唯一的区别是默认的访问权限是不同的
//struct默认的访问权限是公有
//class 默认的访问权限是私有class C1
{int m_a;};struct C2
{int m_a;
};int main()
{C1 c1;//c1.m_a = 100; //不可访问C2 c2;c2.m_a = 100;return 0;
}
5 成员设置为私有的好处
//成员设置为私有的好处
//1.可以控制读写权限class Person
{public://姓名原本是私有,类外根本访问不到,通过函数接口,来间接的修改void setName(string name) //写{m_name = name;}string getName() //读{return m_name;}//希望年龄是只读,那就只提供给一个读的接口int getAge() //读{m_age = 20;return m_age;}void setLover(string lover){m_lover = lover;}private://可以自行设置权限string m_name;int m_age;string m_lover;};int main()
{Person p1;p1.setName("zhangsan");cout << "name = " << p1.getName() << endl;cout << "age = " << p1.getAge() << endl;p1.setLover("baby");return 0;
}
6. 案例1 立方体类
// 案例 :立方体
//求出立方体的面积和体积
//分别用全局函数和成员函数来判断两个立方体是否相等class Cube
{public:void setWidth(int width){m_width = width;}int getWidth(){return m_width;}void setHeight(int height){m_height = height;}int getHeight(){return m_height;}void setLenght(int length){m_lenght = length;}int getLenght(){return m_lenght;}int getArea(){return 2 * (m_width * m_height + m_width * m_lenght + m_lenght * m_height);}int getVolumn(){return m_width * m_height * m_lenght;}bool isSame(Cube c2){if (c2.getHeight() == m_height && c2.getLenght() == m_lenght && c2.getWidth() == m_width)return true;elsereturn false;}private:int m_width;int m_height;int m_lenght;};bool isSameOrNot(Cube c1, Cube c2)
{if (c2.getHeight() == c1.getHeight() && c2.getLenght() == c1.getLenght() && c2.getWidth() == c1.getWidth())return true;elsereturn false;
}int main()
{Cube c1;c1.setHeight(10);c1.setLenght(10);c1.setWidth(10);cout << "the area : " << c1.getArea() << endl;cout << "the volumn : " << c1.getVolumn() << endl;Cube c2;c2.setHeight(10);c2.setLenght(10);c2.setWidth(10);cout << "************ 全局函数判断两个立方体是否一样" << endl;bool ret = isSameOrNot(c1, c2);if (ret){cout << "same" << endl;}else{cout << "not same" << endl;}cout << "************ 成员函数判断两个立方体是否一样" << endl;bool ret1 = c1.isSame(c2);if (ret){cout << "same" << endl;}else{cout << "not same" << endl;}return 0;
}
7 案例2 圆和点的位置关系 一个类可以作为另一个类的成员
//案例:判断点和圆的关系class Point
{
public:void setX(int x){m_x = x;}double getX(){return m_x;}void setY(int y){m_y = y;}double getY(){return m_y;}
private:double m_x;double m_y;
};class Circle
{
public:void setR(int r){m_r = r;}double getR(){return m_r;}void setCenter(Point center){m_center = center;}Point getCenter(){return m_center;}public:void judgeRelation(){}private:double m_r;Point m_center; //这里其实就是创建了一个点的类对象
};void isInCircle(Circle &c ,Point &p)
{int distance;distance = (c.getCenter().getX() - p.getX()) * (c.getCenter().getX() - p.getX()) +(c.getCenter().getY() - p.getY()) * (c.getCenter().getY() - p.getY());int rSquare = c.getR() * c.getR();if (distance > rSquare){cout << "out" << endl;}else if (distance < rSquare){cout << "in" << endl;}else{cout << "on" << endl;}
}int main()
{Circle c;c.setR(10);Point center;center.setX(10);center.setY(0);c.setCenter(center);Point p;p.setX(10);p.setY(20);isInCircle(c, p);return 0;
}
二 对象特性
1.构造函数和析构函数实现类的初始化和清理
class Person
{
public://1.构造函数实现初始化 Person(){cout << "构造函数" << endl;}//2.析构函数实现清理~Person(){cout << "析构函数" << endl;}
};int main()
{Person p1; return 0;
}
2.构造函数的分类和调用
//
//1分类
//按照参数分类 无参构造函数(默认构造) 和 有参构造函数
//按照类型分类 拷贝构造 普通构造class Person
{
public:Person(){cout << "无参构造函数" << endl;}Person(int a){m_age = a;cout << "有参构造函数" << endl;}//拷贝构造Person(const Person &p){//将传入的人的所有属性,拷贝到当前的类中m_age = p.m_age;cout << "拷贝构造" << endl;}~Person(){cout << "析构函数" << endl;}int m_age;
};//构造函数的调用
void test()
{Person p1; //什么都不做,就会调用默认构造函数//注意1,调用默认构造的时候不要写(),不会执行任何东西,因为编译器会认为下面语句是一个函数声明,不会认为在创建对象//Person p();//void func(); 两者类似,可以认为上面一行语句是函数声明//1.括号法Person p2(10); //括号法调用有参构造函数Person p3(p2); //括号法调用拷贝构造函数cout << "p2 age is " << p2.m_age << endl;cout << "p3 age is " << p3.m_age << endl;//2.显示法Person p4 = Person(10); //显示法调用有参构造函数Person p5 = Person(p4); //显示法调用有拷贝构造函数//注意2:单独的一个语句 Person (10); 左侧没有接收,称为匿名对象,匿名对象的特点是当前行执行结束之后,系统立即释放//注意3:不要用拷贝构造函数来初始化一个匿名对象//Person(p5); 运行显示 Person p5重定义 因为 Person(p5) === Person p5,是一对象声明//3.隐式转换法Person p6 = 100; //相等于 Person p6 = Person(10);Person p7 = p6; //隐式转换法 调用拷贝构造函数
}
int main()
{test();return 0;
}```## 3.拷贝构造函数的使用时机```cpp
//拷贝构造函数的调用时机
class Person
{
public:Person(){cout << "无参构造函数" << endl;}Person(int a){m_age = a;cout << "有参构造函数" << endl;}//拷贝构造Person(const Person &p){//将传入的人的所有属性,拷贝到当前的类中m_age = p.m_age;cout << "拷贝构造" << endl;}~Person(){cout << "析构函数" << endl;}int m_age;
};//1.使用一个已经创建完毕的对象来初始化一个新的对象
void test()
{Person p1(20);Person p2(p1);
}//2.值传递的方式给函数参数传值
void doWork(Person p)
{
}
void test02()
{Person p;doWork(p);//形参传值给实参是拷贝之后才传递的
}//3.值方式返回局部对象
Person doWork2()
{Person p; //局部变量,函数调用结束就释放了return p; //但是这里return 的是p的副本,调用了拷贝的新的p,不是创建的对象本身
}
void test03()
{Person p = doWork2();
}int main()
{test03();return 0;
}
3 构造函数的调用规则
//构造函数的调用规则
//默认情况下,c++会至少给一个类添加3个函数
//1.默认提供一个无参构造函数
//2.默认提供一个无参析构
//3.默认提供拷贝构造,对属性进行值拷贝
4 深拷贝与浅拷贝
1.浅拷贝
class Person
{
public:Person(){cout << "无参构造函数" << endl;}Person(int age ,int height){m_age = age;m_height = new int(height);cout << "有参构造函数" << endl;}//拷贝构造Person(const Person &p){//将传入的人的所有属性,拷贝到当前的类中m_age = p.m_age;cout << "拷贝构造" << endl;}~Person(){if (m_height != NULL){delete m_height;m_height = NULL;}cout << "析构函数" << endl;}int m_age;int* m_height; //将这个数据开辟再堆区
};void test01()
{Person p(18, 160);cout << "p.age = " << p.m_age << " p.m_height= " << *p.m_height << endl;Person p1(p);cout << "p1.age = " << p1.m_age << " p1.m_height= " << *p1.m_height << endl;
}int main()
{test01();return 0;
}
上面的程序回报错,显示地址冲突,原因如下:
浅拷贝存在的问题,栈内的数据,先进后出,如果先创建了P1类对象,然后创建了P2类对象,那么在程序执行完之后,类会自己调用析构函数,释放开辟的栈区的内存空间,调用析构的时候,先调用的是P2的析构,后进先出。
但是由于浅拷贝,是完全的将一个类里面的东西,包括地址完全的拷贝过来。在释放的时候,P2先释放,将存放m_height的地址空间先释放了,然后P1回再一次调用析构释放他的内存空间,但是这个内存空间已经被释放了,在这里又对同一个内存空间重复释放
2.深拷贝
什么时候需要用到深拷贝:
当在堆区创建数据时,就需要自己来提供一个深拷贝的拷贝函数
//自己实现拷贝构造,解决浅拷贝的问题,也就是深拷贝,开辟一个新的内存,来存放堆区的数据Person(const Person& p){m_age = p.m_age;m_height = new int(*p.m_height);cout << "拷贝构造" << endl;}
5 初始化列表也可以实现属性的初始化
1.传统的初始化操作,在构造函数中初始化
class Person
{
public:Person(int a, int b, int c){m_a = a;m_b = b;m_c = c;}int m_a;int m_b;int m_c;
};
2.列表初始化
class Person
{
public:Person(int a,int b,int c) :m_a(a), m_b(b), m_c(c){}int m_a;int m_b;int m_c;
};
6 一个类作为另一个类的成员
class Phone
{
public:Phone(string pName){m_phoneName = pName;}string m_phoneName;
};class Person
{
public:Person(string name,string pName):m_name(name), m_phone(pName){}string m_name;Phone m_phone;
};void test()
{Person p("zhang san ", "max");cout << p.m_name << " have " << p.m_phone.m_phoneName << endl;
}int main()
{test();return 0;
}
7 静态成员函数 和静态成员变量 的调用
//静态成员函数
//静态成员函数只能访问静态成员变量
//因为静态成员函数在类里面只有1个,也就是无论你创建多少个类对象,p1,p2,…,所有的类对象是共享这一个静态成员函数的,不会各自创建一个
//静态成员函数,所以,如果你在静态成员函数里面对非静态变量进行操作,非静态成员变量,是属于某一个特定的类对象的属性
//在静态成员函数里面,是无法区分谁是谁的,数据是共享的,两者矛盾,也就是无法区分静态成员函数里面操作的是哪一个类对象的
//成员
class Person
{
public:static void func(){m_A = 100;//m_b = 200; 报错,静态成员函数不能访问非静态的成员变量cout << "static void func() " << endl;}static int m_A; //静态成员变量int m_b;
};//静态成员变量,需要在类内访问,类外声明
int Person::m_A = 0;void test()
{//静态函数的访问,方法1,通过对象访问Person p;p.func();//静态函数的访问,方法2,通过类名访问Person::func();
}int main()
{test();return 0;
}
8 成员变量和成员函数是分开存储的
如何理解这里的分开存储:
也就是说,只有非静态的成员变量是属于类对象的,是和类本身放在一起存储的,打印类的大小时,静态成员函数,静态成员变量,以及成员函数,都对类的大小时没有贡献的。
另外:空类的大小是1,不是0,是因为如果创建多个空类,编译器需要将这些空类放在不同的地址空间,即使是空类,也要避免存放在同一块内存
9 this指针的理解和应用
1.作用1:
前面说了,静态成员函数,只有一份,不会随着创建类的增多,而创建,那么编译器如何区分是谁在调用这共用的函数,就是通过this指针来区分的
2.作用2:
成员函数里面的形参和成员变量同名的时候,可用this来解决
以下程序是运行异常的
class Person
{
public:Person(int age){age = age;}int age;
};void test()
{Person p(18);cout << " age = " << p.age << endl;
}int main()
{test();return 0;
}
可修改为
class Person
{
public:Person(int age){//this指针指向的是 被调用的成员函数 对应的对象this->age = age;}int age;
};void test()
{Person p(18);cout << " age = " << p.age << endl;
}int main()
{test();return 0;
}
3.作用3:
可用于返回对象本身
#include <stdio.h>
#include<iostream>
#include<cstring>
#include<cstdio>using namespace std;&&&&&&&&&&&&&&&&&&&&&& 1.封装 案例1 :设计一个圆类,求圆的周长周长:2*pi*R
//class Circle
//{
// //访问权限
//public:
//
// //属性
// int m_r;
//
// //行为
// //获取圆的周长
// double claculateZC()
// {
// return 2 * 3.14 * m_r;
// }
//};
//
//
//int main()
//{
// Circle C1;
//
// C1.m_r = 10;
//
// cout << "zc is " << C1.claculateZC() << endl;
// return 0;
//} 案例2 :学生类//class Student
//{
//public:
// int m_num;
// string m_name;
//
// void Show()
// {
// cout << "ID: " << m_num << endl;
// cout << "name : " << m_name << endl;
// }
//
// void setName(string name)
// {
// m_name = name;
// }
//};
//
//int main()
//{
// Student s1;
// s1.m_num = 1;
// s1.setName("zhangsan");
// s1.Show();
//
//
// Student s2;
// s2.m_num = 2;
// s2.m_name = "lisi";
// s2.Show();
// return 0;
//}//访问权限
//三种
//公共权限 成员 类内可以访问 ,类外可以访问
//保护权限 成员 类内可以访问 ,类外不可以访问 ,儿子可以访问父亲的保护内容
//私有权限 成员 类内可以访问 ,类外不可以访问 ,儿子不可以访问父亲的私有内容// struct 和 class 的区别
//唯一的区别是默认的访问权限是不同的
//struct默认的访问权限是公有
//class 默认的访问权限是私有//class C1
//{
// int m_a;
//
//};
//
//struct C2
//{
// int m_a;
//};
//
//
//int main()
//{
// C1 c1;
// //c1.m_a = 100; //不可访问
//
// C2 c2;
// c2.m_a = 100;
// return 0;
//}//成员设置为私有的好处
//1.可以控制读写权限//class Person
//{
//
//public:
// //姓名原本是私有,类外根本访问不到,通过函数接口,来间接的修改
// void setName(string name) //写
// {
// m_name = name;
// }
//
// string getName() //读
// {
// return m_name;
// }
//
//
// //希望年龄是只读,那就只提供给一个读的接口
// int getAge() //读
// {
// m_age = 20;
// return m_age;
// }
//
// void setLover(string lover)
// {
// m_lover = lover;
// }
//
//private:
// //可以自行设置权限
// string m_name;
// int m_age;
// string m_lover;
//
//};
//
//int main()
//{
// Person p1;
// p1.setName("zhangsan");
// cout << "name = " << p1.getName() << endl;
//
// cout << "age = " << p1.getAge() << endl;
//
// p1.setLover("baby");
// return 0;
//}// 案例 :立方体
//求出立方体的面积和体积
//分别用全局函数和成员函数来判断两个立方体是否相等//class Cube
//{
//
//public:
// void setWidth(int width)
// {
// m_width = width;
// }
// int getWidth()
// {
// return m_width;
// }
//
// void setHeight(int height)
// {
// m_height = height;
// }
// int getHeight()
// {
// return m_height;
// }
//
// void setLenght(int length)
// {
// m_lenght = length;
// }
// int getLenght()
// {
// return m_lenght;
// }
//
// int getArea()
// {
// return 2 * (m_width * m_height + m_width * m_lenght + m_lenght * m_height);
// }
//
// int getVolumn()
// {
// return m_width * m_height * m_lenght;
// }
//
// bool isSame(Cube c2)
// {
// if (c2.getHeight() == m_height && c2.getLenght() == m_lenght && c2.getWidth() == m_width)
// return true;
// else
// return false;
// }
//
//private:
// int m_width;
// int m_height;
// int m_lenght;
//
//};
//
//
//bool isSameOrNot(Cube c1, Cube c2)
//{
// if (c2.getHeight() == c1.getHeight() && c2.getLenght() == c1.getLenght() && c2.getWidth() == c1.getWidth())
// return true;
// else
// return false;
//}
//
//int main()
//{
// Cube c1;
// c1.setHeight(10);
// c1.setLenght(10);
// c1.setWidth(10);
//
// cout << "the area : " << c1.getArea() << endl;
// cout << "the volumn : " << c1.getVolumn() << endl;
//
// Cube c2;
// c2.setHeight(10);
// c2.setLenght(10);
// c2.setWidth(10);
//
// cout << "************ 全局函数判断两个立方体是否一样" << endl;
// bool ret = isSameOrNot(c1, c2);
// if (ret)
// {
// cout << "same" << endl;
// }
// else
// {
// cout << "not same" << endl;
// }
//
//
// cout << "************ 成员函数判断两个立方体是否一样" << endl;
// bool ret1 = c1.isSame(c2);
// if (ret)
// {
// cout << "same" << endl;
// }
// else
// {
// cout << "not same" << endl;
// }
// return 0;
//}//案例:判断点和圆的关系//class Point
//{
//public:
// void setX(int x)
// {
// m_x = x;
// }
// double getX()
// {
// return m_x;
// }
//
// void setY(int y)
// {
// m_y = y;
// }
// double getY()
// {
// return m_y;
// }
//private:
// double m_x;
// double m_y;
//};
//
//class Circle
//{
//public:
// void setR(int r)
// {
// m_r = r;
// }
// double getR()
// {
// return m_r;
// }
//
// void setCenter(Point center)
// {
// m_center = center;
// }
// Point getCenter()
// {
// return m_center;
// }
//
//public:
// void judgeRelation()
// {
//
// }
//
//private:
// double m_r;
// Point m_center; //这里其实就是创建了一个点的类对象
//};
//
//void isInCircle(Circle &c ,Point &p)
//{
// int distance;
// distance = (c.getCenter().getX() - p.getX()) * (c.getCenter().getX() - p.getX()) +
// (c.getCenter().getY() - p.getY()) * (c.getCenter().getY() - p.getY());
//
// int rSquare = c.getR() * c.getR();
//
// if (distance > rSquare)
// {
// cout << "out" << endl;
// }
// else if (distance < rSquare)
// {
// cout << "in" << endl;
// }
// else
// {
// cout << "on" << endl;
// }
//}
//
//int main()
//{
// Circle c;
// c.setR(10);
//
// Point center;
// center.setX(10);
// center.setY(0);
// c.setCenter(center);
//
// Point p;
// p.setX(10);
// p.setY(20);
// isInCircle(c, p);
//
// return 0;
//}//************************* 对象特性
//1.构造和析构//class Person
//{
//public:
// //1.构造函数实现初始化
// Person()
// {
// cout << "构造函数" << endl;
// }
//
// //2.析构函数实现清理
// ~Person()
// {
// cout << "析构函数" << endl;
// }
//};
//
//int main()
//{
// Person p1;
// return 0;
//}构造函数的分类和调用1分类
按照参数分类 无参构造函数(默认构造) 和 有参构造函数
按照类型分类 拷贝构造 普通构造
//
//class Person
//{
//public:
//
// Person()
// {
// cout << "无参构造函数" << endl;
// }
//
// Person(int a)
// {
// m_age = a;
// cout << "有参构造函数" << endl;
// }
//
// //拷贝构造
// Person(const Person &p)
// {
// //将传入的人的所有属性,拷贝到当前的类中
// m_age = p.m_age;
// cout << "拷贝构造" << endl;
// }
//
//
// ~Person()
// {
// cout << "析构函数" << endl;
// }
//
// int m_age;
//};
//
//
构造函数的调用
//void test()
//{
//
// Person p1; //什么都不做,就会调用默认构造函数
// //注意1,调用默认构造的时候不要写(),不会执行任何东西,因为编译器会认为下面语句是一个函数声明,不会认为在创建对象
// //Person p();
// //void func(); 两者类似,可以认为上面一行语句是函数声明
//
// //1.括号法
// Person p2(10); //括号法调用有参构造函数
// Person p3(p2); //括号法调用拷贝构造函数
//
// cout << "p2 age is " << p2.m_age << endl;
// cout << "p3 age is " << p3.m_age << endl;
//
// //2.显示法
// Person p4 = Person(10); //显示法调用有参构造函数
// Person p5 = Person(p4); //显示法调用有拷贝构造函数
//
// //注意2:单独的一个语句 Person (10); 左侧没有接收,称为匿名对象,匿名对象的特点是当前行执行结束之后,系统立即释放
// //注意3:不要用拷贝构造函数来初始化一个匿名对象
// //Person(p5); 运行显示 Person p5重定义 因为 Person(p5) === Person p5,是一对象声明
//
// //3.隐式转换法
// Person p6 = 100; //相等于 Person p6 = Person(10);
// Person p7 = p6; //隐式转换法 调用拷贝构造函数
//}
//int main()
//{
// test();
// return 0;
//}//构造函数的调用规则
//默认情况下,c++会至少给一个类添加3个函数
//1.默认提供一个无参构造函数
//2.默认提供一个无参析构
//3.默认提供拷贝构造,对属性进行值拷贝深拷贝和浅拷贝//class Person
//{
//public:
//
// Person()
// {
// cout << "无参构造函数" << endl;
// }
//
// Person(int age ,int height)
// {
// m_age = age;
// m_height = new int(height);
// cout << "有参构造函数" << endl;
// }
//
// 拷贝构造
// //Person(const Person &p)
// //{
// // //将传入的人的所有属性,拷贝到当前的类中
// // m_age = p.m_age;
// // cout << "拷贝构造" << endl;
// //}
//
// //自己实现拷贝构造,解决浅拷贝的问题,也就是深拷贝,开辟一个新的内存,来存放堆区的数据
// Person(const Person& p)
// {
// m_age = p.m_age;
// m_height = new int(*p.m_height);
// cout << "拷贝构造" << endl;
// }
//
//
// ~Person()
// {
// if (m_height != NULL)
// {
// delete m_height;
// m_height = NULL;
// }
// cout << "析构函数" << endl;
// }
//
// int m_age;
// int* m_height; //将这个数据开辟再堆区
//};
//
//
//void test01()
//{
// Person p(18, 160);
//
// cout << "p.age = " << p.m_age << " p.m_height= " << *p.m_height << endl;
//
// Person p1(p);
//
// cout << "p1.age = " << p1.m_age << " p1.m_height= " << *p1.m_height << endl;
//}
//
//int main()
//{
// test01();
// return 0;
//}//初始化列表也可以实现属性的初始化//class Person
//{
//public:
// // 传统的初始化操作,在构造函数中初始化
// //Person(int a, int b, int c)
// //{
// // m_a = a;
// // m_b = b;
// // m_c = c;
// //}
//
// Person(int a,int b,int c) :m_a(a), m_b(b), m_c(c)
// {
// }
//
//
// int m_a;
// int m_b;
// int m_c;
//};
//
void test01()
{
Person p(10, 20, 30);
cout << "m_a = " << p.m_a << endl;
cout << "m_b = " << p.m_b << endl;
cout << "m_c = " << p.m_c << endl;
}
//
//void test02()
//{
// Person p;
// cout << "m_a = " << p.m_a << endl;
// cout << "m_b = " << p.m_b << endl;
// cout << "m_c = " << p.m_c << endl;
//}
//
//int main()
//{
// test02();
// return 0;
//}//一个类作为另一个类的成员//class Phone
//{
//public:
// Phone(string pName)
// {
// m_phoneName = pName;
// }
// string m_phoneName;
//};
//
//class Person
//{
//public:
// Person(string name,string pName):m_name(name), m_phone(pName)
// {
// }
//
// string m_name;
// Phone m_phone;
//};
//
//void test()
//{
// Person p("zhang san ", "max");
// cout << p.m_name << " have " << p.m_phone.m_phoneName << endl;
//}
//
//
//int main()
//{
// test();
// return 0;
//}//静态成员函数
//静态成员函数只能访问静态成员变量
//因为静态成员函数在类里面只有1个,也就是无论你创建多少个类对象,p1,p2,...,所有的类对象是共享这一个静态成员函数的,不会各自创建一个
//静态成员函数,所以,如果你在静态成员函数里面对非静态变量进行操作,非静态成员变量,是属于某一个特定的类对象的属性
//在静态成员函数里面,是无法区分谁是谁的,数据是共享的,两者矛盾,也就是无法区分静态成员函数里面操作的是哪一个类对象的
//成员//class Person
//{
//public:
// static void func()
// {
// m_A = 100;
// //m_b = 200; 报错,静态成员函数不能访问非静态的成员变量
// cout << "static void func() " << endl;
// }
//
// static int m_A; //静态成员变量
// int m_b;
//};
//
静态成员变量,需要在类内访问,类外声明
//int Person::m_A = 0;
//
//void test()
//{
// //静态函数的访问,方法1,通过对象访问
// Person p;
// p.func();
//
// //静态函数的访问,方法2,通过类名访问
// Person::func();
//}
//
//int main()
//{
// test();
// return 0;
//}//成员变量和成员函数是分开存储的class Person
{
public:Person(int age){this->age = age;}void PersonAddAge(Person &p){//将传进来的数据加到自身上this->age = this->age + p.age;}Person& PersonAddAge2(Person& p){//将传进来的数据加到自身上this->age = this->age + p.age;//this是指向对象的指针,*this就是解引用//return *this; 返回对象本身return *this;}Person PersonAddAge3(Person& p){//将传进来的数据加到自身上this->age = this->age + p.age;//this是指向对象的指针,*this就是解引用//return *this; 返回对象本身return *this;}int age;
};void test()
{Person p1(18);cout << " p1 age = " << p1.age << endl;Person p2(20);p2.PersonAddAge(p1); //成员函数返回值类型是void,所以这个操作只能执行一次cout << " p2 age = " << p2.age << endl;Person p3(10);p3.PersonAddAge2(p1).PersonAddAge2(p1).PersonAddAge2(p1); //成员函数返回值类型是类对象本身,所以这个操作能无限执行cout << " p3 age = " << p3.age << endl;Person p4(10);p4.PersonAddAge3(p1).PersonAddAge3(p1).PersonAddAge3(p1); //成员函数返回值类型是类对象本身,所以这个操作能无限执行cout << " p4 age = " << p4.age << endl;
}int main()
{test();return 0;
}
p4为什么是10,没有实现累加,是因为:
Person PersonAddAge3(Person& p)
{
this->age = this->age + p.age;
return *this;
}
这里返回类对象,不是类本身,就会调用拷贝构造函数,拷贝构造函数的本质的,创建一个新的类对象,来存放一模一样的数据,也就是说,return的已经不是类对象本身了,而是一个新的类,一个存放了和当前类数据一摸一样的新类,所以
p4.PersonAddAge3(p1).PersonAddAge3(p1).PersonAddAge3(p1);
p4.PersonAddAge3(p1)执行结束后,做了一次累加,返回的类已经不是p4了,所以打印的值只是p4做了一次累加的结果
上述案例,如果返回的
10 为了防止空指针对象访问成员属性,可以再函数里面加一个if判断,防止程序出错
//空指针访问成员函数
class Person
{
public:void showClassNmae(){cout << " showClassNmae() " << endl;}void showAge(){if (this == NULL){return;}cout << "age = " << this->m_age << endl;}int m_age;
};void test()
{Person* p = NULL; //创建一个空指针p->showClassNmae(); // 能正常执行p->showAge(); //报错,显示地址冲突
}int main()
{test();return 0;
}
11 const 修饰成员函数(常函数),const 成员属性(常变量),const 修饰对象(常对象)
//const 修饰成员函数
//常函数里面的对象是不可以修改的
class Person
{
public://常函数//this指针的本质,是指针常量,指针的指向是不可以修改的//在成员函数后面加 const,函数变成常函数,这个const修饰的是this指针,使得thsi指针指向的值也不能修改void showPerson() const{//this->m_a = 100; 报错,表达式必须是可修改的左值 指针指向的值不可以修改this->m_b = 100;}void fun(){}int m_a;mutable int m_b; //常变量,即使在常函数中也可以修改这个变量
};//常对象
void test()
{const Person p;//p.m_a = 100; 报错,常函数和常对象都只能操作常变量,且常对象只能调用常函数p.m_b = 100; p.showPerson();
}int main()
{test();return 0;
}
三 友元
1.全局函数做友元 (所谓全局函数,就是常规的定义在main函数外面的函数)
//全局函数做友元
class Building
{//goodGay函数是 Building的好朋友,可以访问类内的私有成员friend void goodGay(Building* building);
public:Building(){m_sittingRoom = "客厅";m_bedRoom = "卧室";}string m_sittingRoom;private:string m_bedRoom;
};//全局函数
//所谓全局函数,就是放在main函数外面的函数
void goodGay(Building *building)
{cout << "全局函数goodGay is visting :" << building->m_sittingRoom << endl;cout << "全局函数goodGay is visting :" << building->m_bedRoom << endl;
}int main()
{Building b;goodGay(&b);return 0;
}
2 类做友元 以及 在类外实现成员函数
(1)类做友元
class Building
{//goodGay函数是 Building的好朋友,可以访问类内的私有成员friend class GoodGay;public:Building(){m_sittingRoom = "客厅";m_bedRoom = "卧室";}string m_sittingRoom;private:string m_bedRoom;
};class GoodGay
{
public:GoodGay(){building = new Building; //new什么就返回什么,创建了一个Building指针}Building* building;void visit(){cout << "GoodGay is visting :" << building->m_sittingRoom << endl;cout << "GoodGay is visting :" << building->m_bedRoom << endl;}
};int main()
{GoodGay gay;gay.visit();return 0;
}
(2)在类外实现成员函数
class Building
{//goodGay函数是 Building的好朋友,可以访问类内的私有成员friend class GoodGay;public:Building();{ m_sittingRoom = "客厅"; m_bedRoom = "卧室";}string m_sittingRoom;private:string m_bedRoom;
};class GoodGay
{
public:GoodGay();void visit(); //用来访问building对象里面的属性Building* building;
};//类外实现成员函数
Building::Building()
{m_sittingRoom = "客厅";m_bedRoom = "卧室";
}GoodGay::GoodGay()
{building = new Building; //new什么就返回什么,创建了一个Building指针
}void GoodGay::visit()
{cout << "GoodGay is visting :" << building->m_sittingRoom << endl;cout << "GoodGay is visting :" << building->m_bedRoom << endl;
}int main()
{GoodGay gay;gay.visit();return 0;
}
3 全局函数做友元
四 运算符重载
作用:实现自定义变量的运算符重载
1.加号运算符重载(成员函数实现和全局函数实现)
(1).成员函数实现
class Person
{
public:Person operator+(Person &p){Person temp;temp.m_a = this->m_a + p.m_a;temp.m_b = this->m_b + p.m_b;return temp;}int m_a;int m_b;
};void test()
{Person p1;p1.m_a = 10;p1.m_b = 20;Person p2;p2.m_a = 10;p2.m_b = 20;// 下面语句等价于 Person p3 = p1 + p2;Person p3 = p1.operator+(p2);cout << " p3.m_a = " << p3.m_a << endl;cout << " p3.m_b = " << p3.m_b << endl;
}int main()
{test();return 0;
}
(2).全局函数重载
class Person
{
public:int m_a;int m_b;
};Person operator+(Person& p1, Person& p2)
{Person temp;temp.m_a = p1.m_a + p2.m_a;temp.m_b = p1.m_b + p2.m_b;return temp;
}void test()
{Person p1;p1.m_a = 10;p1.m_b = 20;Person p2;p2.m_a = 10;p2.m_b = 20;//下面语句等价于 Person p3 =operator+(p1,p2);Person p3 = p1 + p2;cout << " p3.m_a = " << p3.m_a << endl;cout << " p3.m_b = " << p3.m_b << endl;
}int main()
{test();return 0;
}
(3).运算符重载也可以实现函数重载
class Person
{
public:int m_a;int m_b;
};Person operator+(Person& p1, Person& p2)
{Person temp;temp.m_a = p1.m_a + p2.m_a;temp.m_b = p1.m_b + p2.m_b;return temp;
}//运算符重载也可以实现函数重载
Person operator+(Person& p1, int num)
{Person temp;temp.m_a = p1.m_a + num;temp.m_b = p1.m_b + num;return temp;
}void test()
{Person p1;p1.m_a = 10;p1.m_b = 20;Person p2;p2.m_a = 10;p2.m_b = 20;Person p3 = p1 + p2;cout << " p3.m_a = " << p3.m_a << endl;cout << " p3.m_b = " << p3.m_b << endl;Person p4 = p1 + 100;cout << " p4.m_a = " << p4.m_a << endl;cout << " p4.m_b = " << p4.m_b << endl;
}int main()
{test();return 0;
}
2. 左移运算符重载 <<
//左移运算符( << )重载
//重载左移运算符 ,实现语句 cout << p 打印类里面的相关内容;class Person
{friend ostream& operator<<(ostream& cout, Person& p);public:Person(int a, int b){m_a = a;m_b = b;}
private://不能用成员函数实现左移运算符 目标实现:cout << p //void operator<<(cout) ,调用时候,调用语句是p.operator<<(cout) 调用时,可以简化为调用语句 p << cout,是反的//{//}int m_a;int m_b;
};ostream& operator<<(ostream &cout , Person &p) //调用语句 operator<<( cout , p) == cout << p ,和前面的加号运算符重载可以简化为 p1+p2是一样的
{cout << " p.m_a = " << p.m_a << endl;cout << " p.m_b = " << p.m_b << endl;return cout;
}void test()
{Person p(10,10);cout << p << "hello " << endl;
}int main()
{test();return 0;
}
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- 【SSL.1715】计算面积(计算几何)
计算面积 Description 呆子是一个很聪明的人但也是一个很粗心的人,因此常常会丢三落四。一次老师给呆子留了一个很简单的题目,已知平面上一平行四边形的四个顶点,求这个平行四边形的面积。但粗心的呆子却只记了三个点的坐标,因此…...
2024/4/28 6:10:08 - 【渝粤教育】国家开放大学2018年秋季 2180T办公室管理 参考试题
试卷代号:2208 政治学原理 试题 2019年1月 一、选择题(每题2分,共20分,每题至少有一个答案,多选少选均不能得分) 1.梁启超认为君主专制政体、君主立宪政体和民主宪政政体代表政体的进化方向&am…...
2024/4/14 18:41:39 - WPF 导出DataGrid内容到CV文件
上一篇讲到了如何将DataGrid数据导出到csv 文件,这一章将如何将DataGrid中的数据导出到Excel文件中。 导出的Excel文件如下: 实现代码如下: 创建类 ExportToExcel.cs using Microsoft.Office; using System.Windows.Controls; public cla…...
2024/4/20 6:17:48 - 新手村boss--通讯录管理系统
通讯录管理系统 根据黑马入门视频手敲了一遍,下面是其讲义,做了些修改,完整代码看文章最后面。 1、系统需求 通讯录是一个可以记录亲人、好友信息的工具。 本教程主要利用C来实现一个通讯录管理系统 系统中需要实现的功能如下࿱…...
2024/4/7 4:20:39 - 博弈论过题
博弈论过题 E-取石子游戏 题意 题目很容易懂 思路 这里考虑威佐夫博弈论 AC代码 #include<iostream> #include<cmath> using namespace std;double p(sqrt((double)5)1)/double(2); int main () {int a,b,c;while(cin >> a >> b){cabs(a-b);aa…...
2024/4/20 9:16:16 - MybatisPlus 自动生成代码 controller,serviceiService,mapper,xml,entity
目录代码生成示例代码 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.generator.AutoGenerator; import com.baomidou.mybatisplus.generator.config.DataSourceConfig; import com.baomidou.mybatisplus.generator.…...
2024/4/14 17:03:13 - 灵遁者组诗:无数个存在的可能
导读:灵遁者组诗:无数个存在的可能,首发于此。希望他能激发另一个无数个可能。 无数个可能【组诗】 ——灵遁者 一、 无数个昨夜 汇聚成今夜 今夜,夜色如墨 像一条蘸着原油,带着渴望的绳子 在寒风中露出悲悯的…...
2024/5/3 12:09:13 - 总结简单算法(3)
总结简单算法(3) 详细代码模板: 质数和约数: https://blog.csdn.net/weixin_51304175/article/details/121305477 欧拉函数: https://blog.csdn.net/weixin_51304175/article/details/121306626 快速幂: https://blog.csdn.net/w…...
2024/5/3 12:00:53 - MyBatis-Plus——代码自动生成器
📢📢📢📣📣📣 哈喽!大家好,我是【一心同学】,一位上进心十足的【Java领域博主】!😜😜😜 ✨【一心同学】的写作风格&#x…...
2024/4/19 12:45:12 - 生产问题-生产服务器buff/cache占用过高,swap交换区超限预警
目录 问题发现 言归正传 什么是Swap区 结论 查内存 buff/cache 什么是buff/cache 缓存是可以清除的 解决方案 问题发现 “xx,来一趟生产。” 于是,我意识到又有问题了,于是,问题出现了。。。 言归正传 问题产生&…...
2024/4/25 13:17:52 - MySQL常见问题解决方案
问题1:Mysql启动问题 1.1 使用mysqld命令启动mysql报错 [ERROR] [MY-010119] [Server] Aborting 问题详情: 2022-01-14T05:43:12.932662Z 0 [ERROR] [MY-013276] [Server] Failed to set datadir to /usr/local/mysql-8.0.26-macos11-x86_64/data/ (…...
2024/4/26 12:46:51 - 如何在 zeppelin 里高效的开发 PyFlink Job?
本文重点介绍下如何在 Zeppelin 里高效的开发 PyFlink Job,特别是解决 PyFlink 的环境问题。 大家都知道PyFlink 的开发环境不容易搭建,稍有不慎,PyFlink 环境就会乱掉,而且很难排查原因 本文使用miniconda、conda-pack、mamba分…...
2024/4/18 22:24:12 - C语言——分支语句和循环语句(一)
目录 一、分支语句 二、循环语句 三、goto语句 一、分支语句(选择结构) 1.if 语句: 在if语句中,else总与离它最近的if 匹配。 #include<stdio.h> int main() {//输入一个数字int num 0;scanf("%d", &num);if (num > 100){pr…...
2024/4/18 9:21:52 - 64. 最小路径和(leetcode)
题目描述: 示例 : 输入:grid [[1,3,1],[1,5,1],[4,2,1]] 输出:7 解释:因为路径 1→3→1→1→1 的总和最小。 知识点:动态规划、深度优先搜索 解题思路: 本题可直接用for循环求出每个点的从开…...
2024/4/14 17:03:23 - python学习笔记————第二节课
链式赋值: 链式赋值用于同一个对象赋值给多个变量 。 系列解包赋值: 系列数据赋值给对应相同个数的变量。 常量: python不支持常量,实际是可以改的,只能逻辑上不做修改。 基本数据类型: 1.整型ÿ…...
2024/4/20 5:38:38 - 一.python程序编写
分析问题(IPO) 设计算法 编写程序(实现算法) 调试程序 程序运行方式:交互式,文件式。立即运行,代码以文件方式保存。查看变量值 python语法元素:注释,变量ÿ…...
2024/4/14 17:03:28 - 【Vue3】axios 封装
首先,在项目 src 目录下新建一个 config 文件夹,并在该文件夹下新建一个 index.js: // index.js export default {development: {baseUrl: http://xxx.xxx.xxx.xxx:xxxx // 测试接口域名},beta: {baseUrl: http://xxx.xxx.xxx.xxx:xxxx // 测…...
2024/4/14 17:03:13 - Python基础10(笔记)——递归
1.调用函数自身 2.设置正确的返回条件 def factorical(n):if n 1:return 1else:return n * factorical(n-1) number int(input(请输入一个正整数:)) result factorical(number) print(%d 的阶乘是:%d % (number,result)) 3.斐波那契数列 经历的月…...
2024/4/14 17:04:19 - react 兄弟函数式传值
1.b传c b先传a a传c 第一种 Fu.jsx import React,{useState} from react import Son1 from ./Son1 import Son2 from ./Son2/* 兄弟传值 这种是都用一个父元素 b想传给c b传给a a再传给c即 son1传给fu fu传给 son2 */ export default function Fu() {let [val,setVal]useS…...
2024/4/19 14:25:19 - JDK的安装与环境配置
1、JDK的安装 下载好JDK之后,正常点击下一步安装,需要注意的是安装的位置,安装完不要找不到,因为后面配置环境的时候需要找到安装具体位置,比较简单就不具体演示这一步。 2、JDK环境配置 安装完JDK后,通…...
2024/4/18 15:20:08
最新文章
- 手把手教你实现通讯录
整体构思 我们现在要实现一个通讯录 它应该有以下的功能 通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址 提供方法: 1.添加联系人信息 2.删除指定联系人信息 3.查找指定联系人信息 4.修改指定联系人信…...
2024/5/3 19:41:22 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - UE5、CesiumForUnreal实现加载建筑轮廓GeoJson数据生成白模功能
1.实现目标 在UE5.3中,通过加载本地建筑边界轮廓面GeoJson数据,获取底面轮廓和楼高数据,拉伸生成白模,并支持点选高亮。为防止阻塞Game线程,使用了异步任务进行优化,GIF动图如下所示: 其中建筑数量:128871,顶点索引数量:6695748,三角面数量:2231916,顶点数量:165…...
2024/4/30 1:50:47 - 6.9物联网RK3399项目开发实录-驱动开发之PWM的使用(wulianjishu666)
嵌入式实战开发例程,珍贵资料,开发必备: 链接:https://pan.baidu.com/s/1149x7q_Yg6Zb3HN6gBBAVA?pwdhs8b PWM 使用 前言 AIO-3399J 开发板上有 4 路 PWM 输出,分别为 PWM0 ~ PWM3,4 路 PWM 分别使用在…...
2024/5/2 2:36:05 - 策略模式图
策略模式 小小的图解 主要的三个角色 Strategy—抽象策略角色ConcreateStrategy—具体策略角色Context—上下文角色 封装了对具体策略的调用可以使用set的依赖注入也可以使用构造方法 核心是上下文角色 只要调用上下文角色就行,实现解耦 策略 工厂 将上下文角…...
2024/5/1 13:35:23 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/5/1 17:30:59 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/5/2 16:16:39 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/29 2:29:43 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/5/2 9:28:15 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/27 17:58:04 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/27 14:22:49 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/28 1:28:33 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/30 9:43:09 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/27 17:59:30 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/5/2 15:04:34 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/28 1:34:08 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/26 19:03:37 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/29 20:46:55 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/30 22:21:04 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/1 4:32:01 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/4/27 23:24:42 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/28 5:48:52 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/30 9:42:22 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/5/2 9:07:46 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/30 9:42:49 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57