当前位置: 首页 > news >正文

专业做二手健身器材的是什么网站建网站难不难

专业做二手健身器材的是什么网站,建网站难不难,wordpress 返回首页,个人爱好的网页设计培训1.类的默认成员函数 默认成员函数就是用户没有显式实现#xff0c;编译器会自动生成的成员函数称为默认成员函数。一个类#xff0c;我们不写的情况下编译器会默认生成以下6个默认成员函数#xff0c;需要注意的是这6个中最重要的是前4个#xff0c;最后两个取地址重载不重…1.类的默认成员函数 默认成员函数就是用户没有显式实现编译器会自动生成的成员函数称为默认成员函数。一个类我们不写的情况下编译器会默认生成以下6个默认成员函数需要注意的是这6个中最重要的是前4个最后两个取地址重载不重要我们稍微了解一下即可。其次就是C11以后还会增加两个默认成员函数移动构造和移动赋值这个我们后面再讲解。默认成员函数很重要也比较复杂我们要从两个方面去学习 • 第一我们不写时编译器默认生成的函数行为是什么是否满足我们的需求。 • 第二编译器默认生成的函数不满足我们的需求我们需要自己实现那么如何自己实现 2.构造函数 构造函数是特殊的成员函数需要注意的是构造函数虽然名称叫构造但是构造函数的主要任务并不是开空间创建对象(我们常使用的局部对象是栈帧创建时空间就开好了)而是对象实例化时初始化对象。构造函数的本质是要替代我们以前Stack和Date类中写的Init函数的功能构造函数自动调用的特点就完美的替代的了Init。 构造函数的特点 1. 函数名与类名相同。 2. 无 返回值。 (返回值啥都不需要给也不需要写void不要纠结C规定如此) 3. 对象实例化时系统会自动调用对应的构造函数。 4. 构造函数可以重载。 5. 如果类中没有显式定义构造函数则C编译器会自动生成一个无参的默认构造函数一旦用户显式定义编译器将不再生成。 6. 无 参构造函数、全缺省构造函数、我们不写构造时编译器默认生成的构造函数都叫做默认构造函数。但是这三个函数有且只有一个存在不能同时存在。无参构造函数和全缺省构造函数虽然构成函数重载但是调用时会存在歧义。要注意很多同学会认为默认构造函数是编译器默认生成那个叫默认构造实际上无参构造函数、全缺省构造函数也是默认构造总结一下就是不传实参就可以调用的构造就叫默认构造。 7. 我们不写编译器默认生成的构造对内置类型成员变量的初始化没有要求也就是说是否初始化是不确定的看编译器。对于自定义类型成员变量要求调用这个成员变量的默认构造函数初始化。如果这个成员变量没有默认构造函数那么就会报错我们要初始化这个成员变量需要用初始化列表才能解决初始化列表我们下个章节再细细讲解。 说明C把类型分成内置类型(基本类型)和自定义类型。内置类型就是语言提供的原生数据类型如int/char/double/指针等自定义类型就是我们使用class/struct等关键字自己定义的类型。 首先来实现一下无参构造函数名与类名相同 如果我们没有显式实现编译器自动生成的话这里并没有初始化给的是随机值vs2022 再看一下带参构造这里构造函数可以重载 全缺省构造函数 如果留下三个构造中的第二个带参构造第一个和第三个注释掉那么上图代码会编译报错error C2512: “Date”: 没有合适的默认构造函数可用。但是如果只有全缺省构造函数就不会出问题。 对于自定义类型 要求调用这个成员变量的默认构造函数初始化。如果这个成员变量没有默认构造函数那么就会报错。如下代码所示 #includeiostream using namespace std; typedef int STDataType; class Stack { public:Stack(int n 4){_a (STDataType*)malloc(sizeof(STDataType) * n);if (nullptr _a){perror(malloc申请空间失败);return;}_capacity n;_top 0;}// ... private:STDataType * _a;size_t _capacity;size_t _top; }; // 两个Stack实现队列 class MyQueue { public://编译器默认生成 MyQueue 的构造函数调用了Stack的构造完成了两个成员的初始化 private:Stack pushst;Stack popst; }; int main() {MyQueue mq;return 0; } 调试可以看到mq对象调用了Stack的构造函数。 3.析构函数 析构函数与构造函数功能相反析构函数不是完成对对象本身的销毁比如局部对象是存在栈帧的函数结束栈帧销毁他就释放了不需要我们管C规定对象在销毁时会自动调用析构函数完成对象中资源的清理释放工作。析构函数的功能类比我们之前Stack实现的Destroy功能而像Date没有Destroy其实就是没有资源需要释放所以严格说Date是不需要析构函数的。 析构函数的特点 1. 析构函数名是在类名前加上字符 ~。 2. 无 参数无返回值。 (这里跟构造类似也不需要加void) 3. 一个 类只能有一个析构函数。若未显式定义系统会自动生成默认的析构函数。 4. 对象生命周期结束时系统会自动调用析构函数。 5. 跟构造函数类似我们不写编译器自动生成的析构函数对内置类型成员不做处理自定类型成员会调用他的析构函数。 6. 还需要注意的是我们显式写析构函数对于自定义类型成员也会调用他的析构也就是说自定义类型成员无论什么情况都会自动调用析构函数。 7. 如果类中没有申请资源时析构函数可以不写直接使用编译器生成的默认析构函数如Date如果默认生成的析构就可以用也就不需要显式写析构如MyQueue但是有资源申请时一定要自己写析构否则会造成资源泄漏如Stack。 8. 一个 局部域的多个对象C规定后定义的先析构。 析构和构造功能上相反同样两个栈实现队列不写析构函数的话也会调用成员变量的析构函数 但是如果显式写析构也会自动调用Stack的析构。 4.拷贝构造函数 如果一个构造函数的第一个参数是自身类类型的引用且任何额外的参数都有默认值则此构造函数也叫做拷贝构造函数也就是说拷贝构造是一个特殊的构造函数。 拷贝构造的特点 1. 拷贝构造函数是构造函数的一个重载。 2. 拷贝构造函数的第一个参数必须是类类型对象的引用使用传值方式编译器直接报错因为语法逻辑上会引发无穷递归调用。 3. C规定自定义类型对象进行拷贝行为必须调用拷贝构造所以这里自定义类型传值传参和传值返回都会调用拷贝构造完成。 4. 若未显式定义拷贝构造编译器会生成自动生成拷贝构造函数。自动生成的拷贝构造对内置类型成员变量会完成值拷贝/浅拷贝(一个字节一个字节的拷贝)对自定义类型成员变量会调用他的拷贝构造。 5. 像Date这样的类成员变量全是内置类型且没有指向什么资源编译器自动生成的拷贝构造就可以完成需要的拷贝所以不需要我们显式实现拷贝构造。像Stack这样的类虽然也都是内置类型但是_a指向了资源编译器自动生成的拷贝构造完成的值拷贝/浅拷贝不符合我们的需求所以需要我们自己实现深拷贝(对指向的资源也进行拷贝)。像MyQueue这样的类型内部主要是自定义类型Stack成员编译器自动生成的拷贝构造会调用Stack的拷贝构造也不需要我们显式实现MyQueue的拷贝构造。这里还有一个小技巧如果一个类显式实现了析构并释放资源那么他就需要显式写拷贝构造否则就不需要。 6. 传值返回会产生一个临时对象调用拷贝构造传值引用返回返回的是返回对象的别名(引用)没有产生拷贝。但是如果返回对象是一个当前函数局部域的局部对象函数结束就销毁了那么使用引用返回是有问题的这时的引用相当于一个野引用类似一个野指针一样。传引用返回可以减少拷贝但是一定要确保返回对象在当前函数结束后还在才能用引用返回。 拷贝构造是构造的一个重载拷贝构造的第一个参数必须是自身类型的引用这里d1是调用构造d2调用的是拷贝构造拷贝构造还可以写成Date d2 d1但是为什么要使用引用呢因为调用拷贝构造是用来初始化新建对象的所以我们不期望引用的对象被修改所以最好加上const关键字修饰 首先C 对于传参有以下两个规定 1. 如果传的是内置类型如 int、char 等则直接将值拷贝给形参。 2. 如果传的是自定义类型则需要通过调用该类的拷贝构造函数来初始化形参即局部对象。 假设我要调用一个函数Func1当传值传参d1时会调用拷贝构造拷贝构造初始化完形参后才会进入Func函数。如下图 而如果我们拷贝构造没有使用引用使用值传递方式时在拷贝给形参的过程中会调用拷贝构造函数。而如果拷贝构造函数的参数也是值传递那么就会再次触发拷贝构造函数的调用以此类推形成无限递归调用。 如下图举例当执行到Date d2d1;时会调用拷贝构造函数Date(Date d)来初始化d2但由于参数d是值传递这就需要d1拷贝给d而这个拷贝过程又会调用拷贝构造函数如此反复导致无限递归。 另外如果使用指针传参并不是拷贝构造注意不要搞错了 对于传值返回如下图当调用函数Func2时在函数中构造了一个tmp对象在返回tmp对象时会调用拷贝构造出一个临时对象。 具体如下图 注意现代编译器可能会对其进行优化避免不必要的拷贝构造调用这种优化称为返回值优化或具名返回值优化。但在理解上还是如下图一样思考。 这里一共调用了两次拷贝构造那我们能不能传引用返回来减少拷贝构造呢答案是不可以为什么呢 首先编译会报错如下图因为我们在调用Func函数时会建立栈帧在栈帧上创建了一个临时变量tmp如果我们返回tmp的引用在函数结束时栈帧销毁tmp临时变量也跟着销毁这个时候tmp就是一个野引用。 像Date这样的类成员变量全是内置类型且没有指向什么资源编译器自动生成的拷贝构造就可以完成需要的拷贝所以不需要我们显式实现拷贝构造。如下图将自己编写的拷贝构造注释调用编译器自动生成的没有什么问题。 但是 像Stack这样的类虽然也都是内置类型但是_a指向了资源编译器自动生成的拷贝构造完成的值拷贝/浅拷贝不符合我们的需求所以需要我们自己实现深拷贝(对指向的资源也进行拷贝)。像MyQueue这样的类型内部主要是自定义类型Stack成员编译器自动生成的拷贝构造会调用Stack的拷贝构造也不需要我们显式实现MyQueue的拷贝构造。 #includeiostream using namespace std; typedef int STDataType; class Stack { public:Stack(int n 4){_a (STDataType*)malloc(sizeof(STDataType) * n);if (nullptr _a){perror(malloc申请空间失败);return;}_capacity n;_top 0;}Stack(const Stack st){// 需要对_a指向资源创建同样大的资源进行再拷贝值_a (STDataType*)malloc(sizeof(STDataType) * st._capacity);if (nullptr _a){perror(malloc申请空间失败!!!);return;}memcpy(_a, st._a, sizeof(STDataType) * st._top);_top st._top;_capacity st._capacity;}void Push(STDataType x){if (_top _capacity){size_t newcapacity _capacity * 2;STDataType* tmp (STDataType*)realloc(_a, newcapacity *sizeof(STDataType));if (tmp NULL){perror(realloc fail);return;}_a tmp;_capacity newcapacity;}_a[_top] x;}~Stack(){cout ~Stack() endl;free(_a);_a nullptr;_top _capacity 0;} private:STDataType* _a;size_t _capacity;size_t _top; }; //两个Stack实现队列 class MyQueue { public: private:Stack pushst;Stack popst; }; int main() {Stack st1;st1.Push(1);st1.Push(2);//Stack不显式实现拷贝构造用自动生成的拷贝构造完成浅拷贝//会导致st1和st2里面的_a指针指向同一块资源析构时会析构两次程序崩溃Stack st2 st1;MyQueue mq1;//MyQueue自动生成的拷贝构造会自动调用Stack拷贝构造完成pushst/popst//的拷贝只要Stack拷贝构造自己实现了深拷贝他就没问题MyQueue mq2 mq1;return 0; } 如果只是简单的值拷贝会出现如下图所示的情况 5.赋值运算符重载 5.1运算符重载 • 当运算符被用于类类型的对象时C语言允许我们通过运算符重载的形式指定新的含义。C规定类类型对象使用运算符时必须转换成调用对应运算符重载若没有对应的运算符重载则会编译报错。 • 运算符重载是具有特名字的函数他的名字是由operator和后面要定义的运算符共同构成。和其他函数一样它也具有其返回类型和参数列表以及函数体。 • 重载运算符函数的参数个数和该运算符作用的运算对象数量一样多。一元运算符有一个参数二元运算符有两个参数二元运算符的左侧运算对象传给第一个参数右侧运算对象传给第二个参数。 • 如果一个重载运算符函数是成员函数则它的第一个运算对象默认传给隐式的this指针因此运算符重载作为成员函数时参数比运算对象少一个。 • 运算符重载以后其优先级和结合性与对应的内置类型运算符保持一致。 • 不能通过连接语法中没有的符号来创建新的操作符比如operator。 • .*       ::       sizeof       ?:       . 注意以上5个运算符不能重载。(选择题里面常考大家要记一下 • 重载操作符至少有一个类类型参数不能通过运算符重载改变内置类型对象的含义如 int operator(int x, int y) • 一个 类需要重载哪些运算符是看哪些运算符重载后有意义比如Date类重载operator-就有意义但是重载operator就没有意义。因为日期类-日期类是两个日期相差的时间日期类日期类就没有什么意义但是可以重载为日期类int类型 • 重载运算符时有前置和后置运算符重载函数名都是operator无法很好的区分。C规定后置重载时增加一个int形参跟前置构成函数重载方便区分。 • 重载和时需要重载为全局函数因为重载为成员函数this指针默认抢占了第一个形参位置第一个形参位置是左侧运算对象调用时就变成了 对象cout不符合使用习惯和可读性。重载为全局函数把ostream/istream放到第一个形参位置就可以了第二个形参位置当类类型对象。 不能通过运算符重载改变内置类型对象的含义如下编译会报错。 对于5个不能重载的运算符可能大家对第一个 .* 不太熟悉这里就给大家浅浅介绍一下 我们先使用typedef声明一个成员函数指针然后再给函数指针赋值一般情况直接把函数名赋值给函数指针就可以但是 C 规定成员函数要加 才能取到函数指针所以下面编译会报错 一般函数指针回调只需要*pf()但是成员函数有隐含的this指针所以我们也要隐式传地址那么就需要通过类对象来隐式传这个时候就会出现.*运算符。如下图 首先如果重载为全局函数会面临访问私有成员变量的问题如下编译会报错 那有啥办法呢 1 、成员放公有 2 、 Date 提供 getxxx 函数在类中实现一个获取成员变量的函数然后在类外可以调用函数来访问成员变量 3 、友元函数这个后面类和对象下会讲到 4 、重载为成员函数 这里建议重载为成员函数这样更方便 如下图所示重载运算符为成员函数在调用时有两种方式可以调用。 5.2赋值运算符重载 赋值运算符重载是一个默认成员函数用于完成两个已经存在的对象直接的拷贝赋值这里要注意跟拷贝构造区分拷贝构造用于一个对象拷贝初始化给另一个要创建的对象。 赋值运算符重载的特点 1. 赋值运算符重载是一个运算符重载规定必须重载为成员函数。赋值运算重载的参数建议写成const 当前类类型引用否则传值传参会有拷贝 2. 有返回值且建议写成当前类类型引用引用返回可以提高效率有返回值目的是为了支持连续赋值场景。 3. 没有显式实现时编译器会自动生成一个默认赋值运算符重载默认赋值运算符重载行为跟默认构造函数类似对内置类型成员变量会完成值拷贝/浅拷贝(一个字节一个字节的拷贝)对自定义类型成员变量会调用他的拷贝构造。 4. 像Date这样的类成员变量全是内置类型且没有指向什么资源编译器自动生成的赋值运算符重载就可以完成需要的拷贝所以不需要我们显式实现赋值运算符重载。像Stack这样的类虽然也都是内置类型但是_a指向了资源编译器自动生成的赋值运算符重载完成的值拷贝/浅拷贝不符合我们的需求所以需要我们自己实现深拷贝(对指向的资源也进行拷贝)。像MyQueue这样的类型内部主要是自定义类型Stack成员编译器自动生成的赋值运算符重载会调用Stack的赋值运算符重载也不需要我们显式实现MyQueue的赋值运算符重载。这里还有一个小技巧如果一个类显式实现了析构并释放资源那么他就需要显式写赋值运算符重载否则就不需要。 这里要区分和拷贝构造的区别赋值运算符重载 用于完成两个已经存在的对象直接的拷贝赋值拷贝构造用于一个对象拷贝初始化给另一个要创建的对象。赋值重载的if语句是为了减少自己给自己赋值这种不必要的操作并且传引用返回可以减少拷贝注意这里的传值返回并不会出现上面讲到的野引用问题因为这里返回的是对象本身对象本身并不是赋值重载函数中的临时变量 有返回值是为了可以连续赋值内置类型就可以连续赋值以 C 为例假设我们有内置类型的变量如整数  int a, b, c;  可以通过以下方式进行连续赋值    a b c 5;   这样的连续赋值是从右往左依次进行的首先将 5 赋值给  c 然后将  c  的值此时为 5赋值给  b 最后将  b  的值此时为 5赋值给  a  。所以为了像内置类型一样就需要利用返回值来进行连续赋值 如下图 另外需要注意一下赋值运算符重载的第3和4点 5.3日期类的实现 Date.h #include iostream #include assert.h using namespace std; class Date {// 友元函数声明friend ostream operator(ostream out, const Date d);friend istream operator(istream in, Date d); public:// 获取某年某月的天数int GetMonthDay(int year, int month){assert(month 0 month 13);static int MonthDay[13] { -1, 31,28,31,30,31,30,31,31,30,31,30,31 };if (month 2 ((year % 4 0 year % 100 ! 0) || year % 400 0)){return 29;}else{return MonthDay[month];}}bool CheckDate();void Print();// 全缺省的构造函数Date(int year 1900, int month 1, int day 1);// 拷贝构造函数// d2(d1)Date(const Date d);// 赋值运算符重载// d2 d3 - d2.operator(d2, d3)Date operator(const Date d);// 日期天数Date operator(int day);// 日期天数Date operator(int day);// 日期-天数Date operator-(int day);// 日期-天数Date operator-(int day);// 前置Date operator();// 后置Date operator(int);// 后置--Date operator--(int);// 前置--Date operator--();// 运算符重载bool operator(const Date d);// 运算符重载bool operator(const Date d);// 运算符重载bool operator (const Date d);// 运算符重载bool operator (const Date d);// 运算符重载bool operator (const Date d);// !运算符重载bool operator ! (const Date d);// 日期-日期 返回天数int operator-(const Date d);private:int _year;int _month;int _day; }; ostream operator(ostream out, const Date d); istream operator(istream in, Date d); Date.cpp #include Date.hDate::Date(int year, int month, int day) { _year year;_month month;_day day;if (!CheckDate()){cout 非法日期;} }Date::Date(const Date d) {_year d._year;_month d._month;_day d._day; }bool Date::CheckDate() {if (_month 1 || _month 13|| _day 1 || _day GetMonthDay(_year, _month)){return false;}else{return true;} }void Date::Print() {cout _year / _month / _day endl; }// 赋值运算符重载 Date Date::operator(const Date d) {if (this ! d){_year d._year;_month d._month;_day d._day;}return *this; }// 运算符重载 bool Date::operator(const Date d) {return _year d._year _month d._month _day d._day; }// 运算符重载 bool Date::operator (const Date d) {if (_year d._year){return true;}else if (_year d._year){if (_month d._month){return true;}else if (_month d._month){return _day d._day;}}return false; }// 运算符重载 bool Date::operator (const Date d) {return *this d || *this d; }// !运算符重载 bool Date::operator ! (const Date d) {return !(*this d); }// 运算符重载 bool Date::operator(const Date d) {return !(*this d); }// 运算符重载 bool Date::operator (const Date d) {return !(*this d); }// 日期天数 Date Date::operator(int day) {if (day 0){return *this - -day;}_day day;while (_day GetMonthDay(_year, _month)){_day - GetMonthDay(_year, _month);_month;if (_month 13){_month 1;_year;}}return *this; }// 日期天数 Date Date::operator(int day) {Date tmp *this;tmp day;return tmp; }// 日期-天数 Date Date::operator-(int day) {if (day 0){return *this -day;}_day - day;while (_day 0){--_month;if (_month 0){_month 12;--_year;}_day GetMonthDay(_year, _month);}return *this; }// 日期-天数 Date Date::operator-(int day) {Date tmp *this;tmp - day;return tmp; }// 前置 Date Date::operator() {*this 1;return *this; }// 后置 Date Date::operator(int) {Date tmp *this;*this 1;return tmp; }// 前置-- Date Date::operator--() {*this - 1;return *this; }// 后置-- Date Date::operator--(int) {Date tmp *this;*this - 1;return tmp; }// 日期-日期 返回天数 int Date::operator-(const Date d) {int flag 1;Date max *this;Date min d;if (*this d){max d;min *this;flag -1;}int n 0;while (min ! max){n;min;}return n * flag; }ostream operator(ostream out, const Date d) {out d._year / d._month / d._day endl;return out; }istream operator(istream in, Date d) {cout 请依次输入年月日;in d._year d._month d._day;if (!d.CheckDate()){cout 非法日期;}return in; } 6.取地址运算符重载 6.1const成员函数 • 将const修饰的成员函数称之为const成员函数const修饰成员函数放到成员函数参数列表的后面。 • const实际修饰该成员函数隐含的this指针表明在该成员函数中不能对类的任何成员进行修改。const 修饰Date类的Print成员函数Print隐含的this指针由 Date* const this 变为 const Date* const this const  成员函数的主要特点和作用包括   1. 保证在函数内部不会修改类的数据成员。这使得编译器能够对代码进行更多的优化并为调用者提供一种保证即调用该函数不会导致对象状态的改变。 2. 对于  const  对象只能调用其  const  成员函数。如果试图对  const  对象调用非  const  成员函数将会导致编译错误。 6.2取地址运算符重载 取地址运算符重载分为普通取地址运算符重载和const取地址运算符重载一般这两个函数编译器自动生成的就可以够我们用了不需要去显式实现。除非一些很特殊的场景比如我们不想让别人取到当前类对象的地址就可以自己实现一份胡乱返回一个地址。 class Date { public:Date* operator(){return this;// return nullptr;}const Date* operator()const{return this;// return nullptr;} private:int _year;int _month; int _day; };
文章转载自:
http://www.morning.kqbjy.cn.gov.cn.kqbjy.cn
http://www.morning.rcjyc.cn.gov.cn.rcjyc.cn
http://www.morning.tlnkz.cn.gov.cn.tlnkz.cn
http://www.morning.xhjjs.cn.gov.cn.xhjjs.cn
http://www.morning.jhqcr.cn.gov.cn.jhqcr.cn
http://www.morning.drspc.cn.gov.cn.drspc.cn
http://www.morning.yktwr.cn.gov.cn.yktwr.cn
http://www.morning.zrgdd.cn.gov.cn.zrgdd.cn
http://www.morning.nwllb.cn.gov.cn.nwllb.cn
http://www.morning.yrjhr.cn.gov.cn.yrjhr.cn
http://www.morning.hmdyl.cn.gov.cn.hmdyl.cn
http://www.morning.zdsqb.cn.gov.cn.zdsqb.cn
http://www.morning.byzpl.cn.gov.cn.byzpl.cn
http://www.morning.plnry.cn.gov.cn.plnry.cn
http://www.morning.mwqbp.cn.gov.cn.mwqbp.cn
http://www.morning.rczrq.cn.gov.cn.rczrq.cn
http://www.morning.mgwpy.cn.gov.cn.mgwpy.cn
http://www.morning.dlmqn.cn.gov.cn.dlmqn.cn
http://www.morning.wtbzt.cn.gov.cn.wtbzt.cn
http://www.morning.lmxzw.cn.gov.cn.lmxzw.cn
http://www.morning.hbnwr.cn.gov.cn.hbnwr.cn
http://www.morning.gnkdp.cn.gov.cn.gnkdp.cn
http://www.morning.qwrb.cn.gov.cn.qwrb.cn
http://www.morning.shangwenchao4.cn.gov.cn.shangwenchao4.cn
http://www.morning.qxlxs.cn.gov.cn.qxlxs.cn
http://www.morning.dmzqd.cn.gov.cn.dmzqd.cn
http://www.morning.clpkp.cn.gov.cn.clpkp.cn
http://www.morning.pgkpt.cn.gov.cn.pgkpt.cn
http://www.morning.yrpg.cn.gov.cn.yrpg.cn
http://www.morning.bmts.cn.gov.cn.bmts.cn
http://www.morning.lhzqn.cn.gov.cn.lhzqn.cn
http://www.morning.fwqgy.cn.gov.cn.fwqgy.cn
http://www.morning.cpktd.cn.gov.cn.cpktd.cn
http://www.morning.rlnm.cn.gov.cn.rlnm.cn
http://www.morning.hryhq.cn.gov.cn.hryhq.cn
http://www.morning.txjrc.cn.gov.cn.txjrc.cn
http://www.morning.kqbzy.cn.gov.cn.kqbzy.cn
http://www.morning.qwhbk.cn.gov.cn.qwhbk.cn
http://www.morning.ftsmg.com.gov.cn.ftsmg.com
http://www.morning.kfsfm.cn.gov.cn.kfsfm.cn
http://www.morning.kcbml.cn.gov.cn.kcbml.cn
http://www.morning.dbdmr.cn.gov.cn.dbdmr.cn
http://www.morning.mslhq.cn.gov.cn.mslhq.cn
http://www.morning.smry.cn.gov.cn.smry.cn
http://www.morning.hbywj.cn.gov.cn.hbywj.cn
http://www.morning.bxdlrcz.cn.gov.cn.bxdlrcz.cn
http://www.morning.hhrpy.cn.gov.cn.hhrpy.cn
http://www.morning.huihuangwh.cn.gov.cn.huihuangwh.cn
http://www.morning.rwqj.cn.gov.cn.rwqj.cn
http://www.morning.wrbnh.cn.gov.cn.wrbnh.cn
http://www.morning.tckxl.cn.gov.cn.tckxl.cn
http://www.morning.nhzxr.cn.gov.cn.nhzxr.cn
http://www.morning.nrwr.cn.gov.cn.nrwr.cn
http://www.morning.mrnnb.cn.gov.cn.mrnnb.cn
http://www.morning.rwrn.cn.gov.cn.rwrn.cn
http://www.morning.htbbp.cn.gov.cn.htbbp.cn
http://www.morning.plfy.cn.gov.cn.plfy.cn
http://www.morning.yjknk.cn.gov.cn.yjknk.cn
http://www.morning.lbgfz.cn.gov.cn.lbgfz.cn
http://www.morning.fmkjx.cn.gov.cn.fmkjx.cn
http://www.morning.enjoinfo.cn.gov.cn.enjoinfo.cn
http://www.morning.mghgl.cn.gov.cn.mghgl.cn
http://www.morning.wrtw.cn.gov.cn.wrtw.cn
http://www.morning.xrftt.cn.gov.cn.xrftt.cn
http://www.morning.qmrsf.cn.gov.cn.qmrsf.cn
http://www.morning.llmhq.cn.gov.cn.llmhq.cn
http://www.morning.leyuhh.com.gov.cn.leyuhh.com
http://www.morning.xsctd.cn.gov.cn.xsctd.cn
http://www.morning.lnbcx.cn.gov.cn.lnbcx.cn
http://www.morning.zrlms.cn.gov.cn.zrlms.cn
http://www.morning.mdpkf.cn.gov.cn.mdpkf.cn
http://www.morning.nwfxp.cn.gov.cn.nwfxp.cn
http://www.morning.nmwgd.cn.gov.cn.nmwgd.cn
http://www.morning.xcszl.cn.gov.cn.xcszl.cn
http://www.morning.jbfjp.cn.gov.cn.jbfjp.cn
http://www.morning.znknj.cn.gov.cn.znknj.cn
http://www.morning.lmrjn.cn.gov.cn.lmrjn.cn
http://www.morning.ypktc.cn.gov.cn.ypktc.cn
http://www.morning.ssxlt.cn.gov.cn.ssxlt.cn
http://www.morning.qstjr.cn.gov.cn.qstjr.cn
http://www.tj-hxxt.cn/news/236704.html

相关文章:

  • 一个可以做网站网站建设的硬件平台
  • 爱的网站歌曲克隆的网站怎么做数据库
  • 农业网站模板WordPress机票旅游网站建设
  • 重庆sem网站推广电子商城系统平台
  • 有哪些网站可以做任务浏览器搜索引擎大全
  • 一站式做网站系统icon图标素材下载网站
  • 网站目录遍历茂名seo快速排名外包
  • 全屋定制怎么样做网站学校网站资源库建设和资源上传
  • 给设计网站做图会字体侵权吗家具网站策划书
  • 中国最好网站建设公司网站设计制作一般多少钱
  • 哈尔滨网站建设自助建站app store下载正版
  • 公明网站建设东莞最穷的三个镇
  • 网站设计与制作是做什么工作千万别学广告学
  • 有几个网站如何做外贸wordpress好的插件推荐
  • 孝感网站建设西安建设网
  • 网站制作的预算附近做网站
  • 自己做的网站怎么在局域网中访问安卓系统app开发公司
  • 自己怎样做海外网站网络管理系统密码
  • 湖南鸿源电力建设有限公司网站建设是哪里的
  • 西安建站公司模板高端网页定制
  • 广东公司网站建设企业旅游网站建设目的
  • 唐山石家庄做网站哪家好wordpress点击网页效果
  • 河南省水利建设厅网站外贸网店建站模板
  • 阿里巴巴国际站运营模式图片制作二维码的方法
  • 什么网站做简历最好wordpress为艾迪
  • 网站标题怎么设置电商平台代运营
  • 网站维护的重要性建网站容易吗
  • 秦皇岛网站村网通为每个农村建设了网站
  • wordpress灯箱图片翻页seo快速排名软件品牌
  • 在线做网站索引西安营销型网站制作价格