如何能进深圳好的设计公司网站,永康城乡建设局网站,创建网站需要注意什么,网上商城开发文章目录 前言类的基本概念基本结构类与结构体的区别示例代码 类的属性和方法属性#xff08;成员变量#xff09;方法#xff08;成员函数#xff09;访问修饰符示例代码 类的构造函数和析构函数构造函数析构函数示例代码 类的构造函数重载重载构造函数示例代码 类中的拷贝… 文章目录 前言类的基本概念基本结构类与结构体的区别示例代码 类的属性和方法属性成员变量方法成员函数访问修饰符示例代码 类的构造函数和析构函数构造函数析构函数示例代码 类的构造函数重载重载构造函数示例代码 类中的拷贝构造函数和赋值运算符拷贝构造函数赋值运算符示例代码 类中的静态成员静态成员变量静态成员函数示例代码 类中的继承继承的类型示例代码公有继承示例代码私有继承示例代码保护继承 多态多态的类型虚函数和动态多态示例代码 友元函数和友元类友元函数友元类示例代码 运算符重载运算符重载的基本概念示例代码 模板类模板类的基本概念示例代码 高级特性虚继承多重继承抽象类接口虚继承示例代码多重继承示例代码多重继承抽象类示例代码抽象类接口示例代码接口 总结万字长文朋友们点赞、关注啊 前言 这次主要讲类的基础、构造函数与析构函数的使用以及继承和多态。 类的基本概念
在C中类是一种用于创建对象的数据结构它封装了数据属性和操作这些数据的方法函数。类定义了对象的特性和行为。
基本结构
一个类通常包括以下部分
数据成员代表对象的属性。成员函数定义对象可以执行的操作。访问修饰符如 public、private 和 protected用于控制成员的访问权限。
类与结构体的区别
在C中类和结构体非常相似但一个主要区别是默认的访问权限。在类中默认的成员访问权限是私有private而在结构体中默认是公有public。
示例代码
下面是一个简单的类定义和使用的例子
#include iostream
#include string// 定义一个类
class Person {
public: // 公有访问修饰符// 构造函数Person(std::string name, int age) : name(name), age(age) {}// 成员函数void introduce() {std::cout Name: name , Age: age std::endl;}private: // 私有访问修饰符// 数据成员std::string name;int age;
};int main() {// 创建Person类的对象Person person(Alice, 30);// 调用成员函数person.introduce();return 0;
}在这个例子中
Person 类有两个私有数据成员name 和 age。类有一个公共构造函数它接受 name 和 age 参数来初始化对象。introduce 是一个公共成员函数用于打印对象的信息。在 main 函数中我们创建了一个 Person 对象并调用了它的 introduce 方法。
当然让我们详细探讨C中类的属性和方法同时提供一个完整的代码示例。
类的属性和方法
属性成员变量
属性是类中定义的变量它们代表对象的状态或特性。在类中声明属性可以使得每个对象都有自己的一套属性。
方法成员函数
方法是类中定义的函数它们用于执行操作可以访问和修改对象的属性。方法提供了与对象交互的接口。
访问修饰符
访问修饰符决定了类成员的访问级别。最常用的有三种 public可以被任何外部代码访问。private只能被类的其他成员方法或友元访问。protected只能被类本身、派生类及友元访问。
示例代码
下面是一个类的属性和方法的简单示例
#include iostream
#include stringclass Car {
public:// 构造函数Car(std::string model, int year) : model(model), year(year) {}// 公共方法void displayInfo() {std::cout Car Model: model , Year: year std::endl;}// 设置年份void setYear(int newYear) {year newYear;}// 获取年份int getYear() {return year;}private:// 私有属性std::string model;int year;
};int main() {// 创建Car类的对象Car myCar(Toyota, 2020);// 调用公共方法myCar.displayInfo();// 更新年份myCar.setYear(2022);// 再次显示信息myCar.displayInfo();return 0;
}在这个例子中
Car 类有两个私有属性model 和 year。公共方法 displayInfo 用于打印汽车信息。另外两个公共方法 setYear 和 getYear 分别用于设置和获取年份。在 main 函数中我们创建了一个 Car 对象展示了如何使用这些方法来操作对象的状态。
类的构造函数和析构函数
构造函数
构造函数在创建类的对象时自动调用。它的主要作用是初始化对象的属性。构造函数的名称与类名相同并且没有返回类型。可以有参数也可以没有默认构造函数。可以进行重载即一个类可以有多个构造函数只要它们的参数列表不同。
析构函数
析构函数在对象销毁时自动调用。它的主要作用是进行清理工作如释放资源、关闭文件等。析构函数的名称是类名前加上波浪符号~没有返回类型也不接受参数。每个类只能有一个析构函数。
示例代码
下面是一个包含构造函数和析构函数的C类示例
#include iostream
#include stringclass Book {
public:// 构造函数Book(std::string title, std::string author) : title(title), author(author) {std::cout Book title by author created. std::endl;}// 析构函数~Book() {std::cout Book title by author destroyed. std::endl;}// 显示书籍信息的方法void displayInfo() {std::cout Title: title , Author: author std::endl;}private:std::string title;std::string author;
};int main() {// 创建Book对象Book myBook(1984, George Orwell);// 使用对象的方法myBook.displayInfo();// 对象myBook在这里会被自动销毁调用析构函数return 0;
}在这个例子中
Book 类有两个私有属性title 和 author。它有一个构造函数用于初始化这些属性并打印一条创建消息。还有一个析构函数当对象被销毁时它会打印一条销毁消息。main 函数中创建了一个 Book 对象然后调用了它的 displayInfo 方法。程序结束时myBook 对象的析构函数会被自动调用。
构造函数和析构函数使得对象的初始化和销毁自动执行有助于管理资源和避免内存泄漏。
类的构造函数重载
在C中可以为一个类定义多个构造函数只要它们的参数列表不同。这就是所谓的构造函数重载。重载构造函数允许以不同的方式初始化同一个类的对象。
重载构造函数
目的提供不同的方式来初始化对象。方法在同一个类中定义多个构造函数每个构造函数的参数类型、个数或顺序至少有一个不同。使用场景需要根据不同的数据或条件创建对象时非常有用。
示例代码
下面的例子演示了如何在C中重载构造函数
#include iostream
#include stringclass Rectangle {
public:// 构造函数1接受两个参数Rectangle(int w, int h) : width(w), height(h) {std::cout Rectangle created with width width and height height std::endl;}// 构造函数2接受一个参数explicit Rectangle(int size) : width(size), height(size) {std::cout Square created with size size std::endl;}// 方法计算面积int getArea() const {return width * height;}private:int width, height;
};int main() {// 使用第一个构造函数Rectangle rect1(10, 20);// 使用第二个构造函数Rectangle rect2(10);std::cout Area of rect1: rect1.getArea() std::endl;std::cout Area of rect2: rect2.getArea() std::endl;return 0;
}在这个例子中
Rectangle 类有两个构造函数。第一个接受两个参数宽和高第二个仅接受一个参数正方形的边长。两个构造函数具有不同的参数列表因此它们被重载了。main 函数中我们分别使用两种不同的构造函数创建了两个 Rectangle 对象。
通过重载构造函数Rectangle 类可以灵活地根据提供的参数来初始化对象使得对象的创建更加灵活。
类中的拷贝构造函数和赋值运算符
拷贝构造函数
拷贝构造函数在创建类的一个新对象时使用另一个对象的内容进行初始化时调用。它通常有一个参数即对同类型对象的引用。如果没有自定义拷贝构造函数编译器会提供一个默认的拷贝构造函数进行逐成员的拷贝。
赋值运算符
赋值运算符用于将一个对象的内容复制到另一个已经存在的对象中。与拷贝构造函数不同赋值运算符在对象已经初始化后使用。如果不自定义赋值运算符编译器将提供一个默认的进行逐成员的赋值。
示例代码
下面是一个展示拷贝构造函数和赋值运算符使用的示例
#include iostream
#include stringclass Person {
public:// 构造函数Person(std::string name) : name(name) {}// 拷贝构造函数Person(const Person other) : name(other.name) {std::cout Copied Person: name std::endl;}// 赋值运算符Person operator(const Person other) {if (this ! other) { // 防止自赋值name other.name;}return *this;}// 显示姓名void printName() {std::cout Persons name is: name std::endl;}private:std::string name;
};int main() {Person person1(Alice);Person person2 person1; // 调用拷贝构造函数Person person3(Bob);person3 person1; // 调用赋值运算符person1.printName();person2.printName();person3.printName();return 0;
}在这个示例中
Person 类包含一个构造函数、一个拷贝构造函数和一个赋值运算符。当我们用 person1 初始化 person2 时调用了拷贝构造函数。当我们将 person1 赋值给 person3 时调用了赋值运算符。
拷贝构造函数和赋值运算符对于管理资源如动态分配的内存非常重要可以防止诸如浅拷贝和资源泄漏等问题。在设计类时根据需要合理地实现这两个函数是非常重要的。
类中的静态成员
静态成员可以是变量或函数它们属于类本身而不是类的任何特定对象。这意味着静态成员由类的所有对象共享。
静态成员变量
静态成员变量是类的所有对象共享的变量。它们不属于任何单个对象。静态变量在程序的生命周期内只被初始化一次并且在类的所有对象之间共享。它们通常用于存储类级别的信息比如对象计数。
静态成员函数
静态成员函数可以在不创建类的对象的情况下调用。它们只能访问静态成员变量和其他静态成员函数。通常用于执行不依赖于对象状态的操作。
示例代码
以下是一个包含静态成员的C类的示例
#include iostreamclass MyClass {
public:// 构造函数MyClass() {// 每创建一个对象计数器增加objectCount;}// 静态成员函数static int getObjectCount() {return objectCount;}private:// 静态成员变量static int objectCount;
};// 初始化静态成员变量
int MyClass::objectCount 0;int main() {MyClass obj1;MyClass obj2;MyClass obj3;// 直接通过类名调用静态成员函数std::cout Total objects: MyClass::getObjectCount() std::endl;return 0;
}在这个例子中
MyClass 类有一个静态成员变量 objectCount用于跟踪创建的对象数量。类中有一个静态成员函数 getObjectCount它返回 objectCount 的值。在 main 函数中我们创建了三个 MyClass 的对象并通过类名直接调用 getObjectCount 来显示创建的对象总数。
类中的继承
继承是面向对象编程的一个基本概念它允许基于一个类基类创建一个新的类派生类。这种机制提供了代码重用和层次化分类的能力。
继承的类型
公有继承public inheritance基类的公有成员和保护成员在派生类中保持其原有的访问级别。保护继承protected inheritance基类的公有成员和保护成员在派生类中变成保护成员。私有继承private inheritance基类的公有成员和保护成员在派生类中变成私有成员。
示例代码公有继承
#include iostream
#include string// 基类
class Animal {
public:Animal(std::string name) : name(name) {}void eat() {std::cout name is eating. std::endl;}protected:std::string name;
};// 派生类
class Dog : public Animal {
public:Dog(std::string name) : Animal(name) {}void bark() {std::cout name is barking. std::endl;}
};int main() {Dog myDog(Buddy);myDog.eat(); // 调用基类方法myDog.bark(); // 调用派生类方法return 0;
}在这个例子中
Animal 是一个基类具有一个公有方法 eat 和一个受保护的成员变量 name。Dog 是从 Animal 公有继承而来的派生类。它继承了 Animal 的特性并添加了自己的方法 bark。在 main 函数中我们创建了一个 Dog 对象可以调用从基类继承的 eat 方法以及派生类的 bark 方法。
当然我可以提供私有继承和保护继承的示例以进一步阐释这些继承类型在C中的应用。
示例代码私有继承
#include iostream
#include string// 基类
class Vehicle {
public:Vehicle(std::string type) : type(type) {}protected:std::string type;
};// 派生类 - 私有继承
class Car : private Vehicle {
public:Car(std::string type) : Vehicle(type) {}void showType() {std::cout Car type: type std::endl; // 可以访问基类的保护成员}
};int main() {Car myCar(SUV);myCar.showType(); // 正确// 下面的代码将会产生编译错误因为type在Car中是私有的// std::cout myCar.type std::endl;return 0;
}示例代码保护继承
#include iostream
#include string// 基类
class Device {
public:Device(std::string name) : name(name) {}protected:std::string name;
};// 派生类 - 保护继承
class Printer : protected Device {
public:Printer(std::string name) : Device(name) {}void printName() {std::cout Printer name: name std::endl; // 可以访问基类的保护成员}
};int main() {Printer myPrinter(HP LaserJet);myPrinter.printName(); // 正确// 下面的代码将会产生编译错误因为name在Printer中是保护的// std::cout myPrinter.name std::endl;return 0;
}多态 多态是面向对象编程的一个核心概念允许对象以不同的方式响应相同的消息或方法调用。在C中多态主要通过虚函数virtual functions实现。 多态的类型
编译时多态也称为静态多态主要通过函数重载和运算符重载实现。运行时多态也称为动态多态主要通过虚函数和函数覆盖override实现。
虚函数和动态多态
虚函数允许派生类重写override基类中的函数。使用虚函数时类的行为将根据对象的实际类型而非其声明类型来确定。动态多态只能通过指针或引用来实现。
示例代码
以下是一个展示C中使用虚函数实现多态的示例
#include iostream// 基类
class Shape {
public:// 虚函数virtual void draw() const {std::cout Drawing a shape. std::endl;}// 虚析构函数virtual ~Shape() {}
};// 派生类1
class Circle : public Shape {
public:void draw() const override { // 重写虚函数std::cout Drawing a circle. std::endl;}
};// 派生类2
class Rectangle : public Shape {
public:void draw() const override { // 重写虚函数std::cout Drawing a rectangle. std::endl;}
};void drawShape(const Shape shape) {shape.draw(); // 动态绑定
}int main() {Circle circle;Rectangle rectangle;drawShape(circle); // 输出: Drawing a circle.drawShape(rectangle); // 输出: Drawing a rectangle.return 0;
}在这个示例中
Shape 是一个基类具有一个虚函数 draw 和一个虚析构函数。Circle 和 Rectangle 是从 Shape 派生的类它们重写了 draw 方法。drawShape 函数接受一个 Shape 类型的引用并调用 draw 方法。由于 draw 是虚函数实际调用的是对象的动态类型对应的方法这就是多态的体现。
友元函数和友元类
友元在C中是一种特殊的机制允许特定的函数或类访问另一个类的私有private和保护protected成员。
友元函数
友元函数不是类的成员但它可以访问类的所有私有和保护成员。友元函数通过在类内部使用 friend 关键字声明。友元函数常用于操作两个类的私有数据例如重载某些运算符时。
友元类
友元类的所有成员函数都可以访问另一个类的私有和保护成员。通过将一个类声明为另一个类的友元可以提高类间的耦合性。友元关系不是相互的。如果类A是类B的友元这并不意味着类B是类A的友元。
示例代码
以下是展示友元函数和友元类的示例
#include iostream// 前向声明
class Box;class Contents {
public:explicit Contents(int value) : value(value) {}// 友元函数声明friend void showContents(const Box b);private:int value;
};class Box {
public:explicit Box(int secret) : secret(secret) {}// 友元类声明friend class SecretInspector;private:int secret;Contents contents{123}; // 假设内容是私有的
};// 友元类
class SecretInspector {
public:void inspect(const Box b) {std::cout Box secret: b.secret std::endl;}
};// 友元函数实现
void showContents(const Box b) {std::cout Box contents: b.contents.value std::endl;
}int main() {Box myBox(42);SecretInspector inspector;inspector.inspect(myBox); // 访问Box的私有数据showContents(myBox); // 访问Box中Contents的私有数据return 0;
}在这个示例中
Box 类有一个私有成员 secret 和一个私有嵌套对象 contents。SecretInspector 类被声明为 Box 的友元类因此它可以访问 Box 的所有私有成员。showContents 函数被声明为 Box 的友元函数因此它可以访问 Box 中的 contents 的私有成员。
运算符重载
运算符重载是一种形式的多态允许你定义或改变运算符如 , -, *, / 等在自定义类型如类或结构体上的行为。
运算符重载的基本概念
目的使自定义类型的对象可以使用标准运算符进行操作。方法通过在类内定义一个特殊的成员函数或友元函数来实现。这个函数使用 operator 关键字后跟要重载的运算符符号。限制不能创建新的运算符只能重载已有的运算符。某些运算符如 ::, .*, . 和 ?:不能被重载。
示例代码
下面是一个如何重载加法运算符的示例
#include iostreamclass Coordinate {
public:Coordinate(int x, int y) : x(x), y(y) {}// 运算符 重载Coordinate operator(const Coordinate other) const {return Coordinate(x other.x, y other.y);}// 输出坐标的友元函数friend std::ostream operator(std::ostream os, const Coordinate coord);private:int x, y;
};// 输出运算符 的重载
std::ostream operator(std::ostream os, const Coordinate coord) {os ( coord.x , coord.y );return os;
}int main() {Coordinate point1(1, 2);Coordinate point2(3, 4);Coordinate sum point1 point2;std::cout Sum of coordinates: sum std::endl;return 0;
}在这个示例中
Coordinate 类重载了加法运算符使其能够用于两个坐标对象的加法。重载运算符返回一个新的 Coordinate 对象其 x 和 y 值是两个操作数对象的 x 和 y 值之和。同时为了能够方便地打印坐标重载了输出运算符。
模板类
模板类是一种强大的C特性允许编写与数据类型无关的通用代码。
模板类的基本概念
目的实现代码的泛型编程即相同的代码可以用于不同的数据类型。方法使用关键字 template 定义模板后面跟一个或多个模板参数。使用场景当你需要类似的行为对多种数据类型执行时比如容器类如 vector、map 等。
示例代码
以下是一个定义和使用模板类的示例
#include iostream// 模板类定义
templatetypename T
class Box {
public:Box(T content) : content(content) {}T getContent() {return content;}private:T content;
};int main() {// 使用模板类创建整数盒子Boxint intBox(123);// 使用模板类创建字符串盒子Boxstd::string stringBox(Hello World);std::cout Integer Box contains: intBox.getContent() std::endl;std::cout String Box contains: stringBox.getContent() std::endl;return 0;
}在这个示例中
Box 类是一个模板类它有一个模板参数 T。这个 T 可以在创建 Box 对象时被替换为任何类型。类中的 content 成员变量和 getContent 方法都使用了模板参数 T。在 main 函数中我们创建了两个 Box 对象一个用于整数 (int)另一个用于字符串 (std::string)。
高级特性
虚继承
用途解决多重继承中的菱形继承问题即两个派生类继承自同一个基类再被另一个类同时继承时的冗余和歧义问题。实现通过 virtual 关键字在继承时使用。
多重继承
用途允许一个类同时从多个基类继承。注意事项需要小心处理由多个基类引入的复杂性如成员冲突和菱形继承问题。
抽象类
用途作为基类定义一个接口但不完全实现所有功能留给派生类去实现。特点包含至少一个纯虚函数用 0 表示。
接口
概念在C中通常通过完全抽象的类实现即所有成员函数都是纯虚函数。用途定义一个类必须遵循的方法但不提供任何实现。
虚继承示例代码
#include iostreamclass Base {
public:virtual void print() {std::cout Base std::endl;}
};// 虚继承
class Derived1 : virtual public Base {
public:void print() override {std::cout Derived1 std::endl;}
};class Derived2 : virtual public Base {
public:void print() override {std::cout Derived2 std::endl;}
};class Final : public Derived1, public Derived2 {
public:// 调用最近的覆盖void print() override {Derived2::print();}
};int main() {Final obj;obj.print(); // 输出 Derived2// 通过基类引用访问Base baseRef obj;baseRef.print(); // 同样输出 Derived2return 0;
}在这个示例中
Base 是一个基类Derived1 和 Derived2 都通过虚继承继承自 Base。Final 类从 Derived1 和 Derived2 继承解决了潜在的菱形继承问题。print 方法在 Derived1 和 Derived2 中被覆盖并在 Final 中再次覆盖。
当然我可以为多重继承、抽象类和接口提供相应的C示例。
多重继承
多重继承允许一个类同时继承自多个基类。
示例代码多重继承
#include iostream// 基类1
class Printer {
public:void print() {std::cout Printing document std::endl;}
};// 基类2
class Scanner {
public:void scan() {std::cout Scanning document std::endl;}
};// 派生类从两个基类继承
class MultifunctionMachine : public Printer, public Scanner {};int main() {MultifunctionMachine mfm;mfm.print(); // 调用Printer的成员mfm.scan(); // 调用Scanner的成员return 0;
}抽象类
抽象类至少包含一个纯虚函数并且不能直接实例化。
示例代码抽象类
#include iostream// 抽象基类
class Shape {
public:// 纯虚函数virtual void draw() const 0;
};// 派生类
class Circle : public Shape {
public:void draw() const override {std::cout Drawing a circle. std::endl;}
};int main() {Circle circle;circle.draw(); // 调用派生类的实现// Shape shape; // 错误不能实例化抽象类return 0;
}接口
在C中接口可以通过完全抽象的类只有纯虚函数实现。
示例代码接口
#include iostream// 接口
class Drawable {
public:virtual void draw() const 0;
};// 实现接口的类
class Rectangle : public Drawable {
public:void draw() const override {std::cout Drawing a rectangle. std::endl;}
};int main() {Rectangle rect;rect.draw(); // 调用具体实现return 0;
}总结
这次从类的基础知识开始讲了构造函数、析构函数、以及类的成员变量和方法。
接着讲了重载构造函数、拷贝构造函数、赋值运算符以及静态成员。
然后讲了继承、多态、友元类和友元函数。
最后模板类的概念还有一些高级特性的基本概念
万字长文朋友们点赞、关注啊 文章转载自: http://www.morning.yhjrc.cn.gov.cn.yhjrc.cn http://www.morning.pxmyw.cn.gov.cn.pxmyw.cn http://www.morning.sgnxl.cn.gov.cn.sgnxl.cn http://www.morning.kxqpm.cn.gov.cn.kxqpm.cn http://www.morning.bsjpd.cn.gov.cn.bsjpd.cn http://www.morning.pqbkk.cn.gov.cn.pqbkk.cn http://www.morning.thbqp.cn.gov.cn.thbqp.cn http://www.morning.lkbyj.cn.gov.cn.lkbyj.cn http://www.morning.djpps.cn.gov.cn.djpps.cn http://www.morning.srjbs.cn.gov.cn.srjbs.cn http://www.morning.xjnw.cn.gov.cn.xjnw.cn http://www.morning.nxtgb.cn.gov.cn.nxtgb.cn http://www.morning.lchtb.cn.gov.cn.lchtb.cn http://www.morning.cfnht.cn.gov.cn.cfnht.cn http://www.morning.rwlsr.cn.gov.cn.rwlsr.cn http://www.morning.fsrtm.cn.gov.cn.fsrtm.cn http://www.morning.gcjhh.cn.gov.cn.gcjhh.cn http://www.morning.qxlgt.cn.gov.cn.qxlgt.cn http://www.morning.yrjxr.cn.gov.cn.yrjxr.cn http://www.morning.yrsg.cn.gov.cn.yrsg.cn http://www.morning.ywqw.cn.gov.cn.ywqw.cn http://www.morning.zmyhn.cn.gov.cn.zmyhn.cn http://www.morning.mtgkq.cn.gov.cn.mtgkq.cn http://www.morning.qrksj.cn.gov.cn.qrksj.cn http://www.morning.xclgf.cn.gov.cn.xclgf.cn http://www.morning.thzgd.cn.gov.cn.thzgd.cn http://www.morning.jqcrf.cn.gov.cn.jqcrf.cn http://www.morning.mdgpp.cn.gov.cn.mdgpp.cn http://www.morning.cbnjt.cn.gov.cn.cbnjt.cn http://www.morning.ie-comm.com.gov.cn.ie-comm.com http://www.morning.jhqcr.cn.gov.cn.jhqcr.cn http://www.morning.bkkgt.cn.gov.cn.bkkgt.cn http://www.morning.nkqnn.cn.gov.cn.nkqnn.cn http://www.morning.dgsx.cn.gov.cn.dgsx.cn http://www.morning.lqytk.cn.gov.cn.lqytk.cn http://www.morning.gwxsk.cn.gov.cn.gwxsk.cn http://www.morning.burpgr.cn.gov.cn.burpgr.cn http://www.morning.yrdn.cn.gov.cn.yrdn.cn http://www.morning.psdsk.cn.gov.cn.psdsk.cn http://www.morning.hqjtp.cn.gov.cn.hqjtp.cn http://www.morning.zxxys.cn.gov.cn.zxxys.cn http://www.morning.qhczg.cn.gov.cn.qhczg.cn http://www.morning.fjfjm.cn.gov.cn.fjfjm.cn http://www.morning.lmzpk.cn.gov.cn.lmzpk.cn http://www.morning.zcwwb.cn.gov.cn.zcwwb.cn http://www.morning.yktr.cn.gov.cn.yktr.cn http://www.morning.zmlbq.cn.gov.cn.zmlbq.cn http://www.morning.dfojgo.cn.gov.cn.dfojgo.cn http://www.morning.wnhsw.cn.gov.cn.wnhsw.cn http://www.morning.mkpqr.cn.gov.cn.mkpqr.cn http://www.morning.ryyjw.cn.gov.cn.ryyjw.cn http://www.morning.gbyng.cn.gov.cn.gbyng.cn http://www.morning.ddgl.com.cn.gov.cn.ddgl.com.cn http://www.morning.tnrdz.cn.gov.cn.tnrdz.cn http://www.morning.xtqld.cn.gov.cn.xtqld.cn http://www.morning.knpmj.cn.gov.cn.knpmj.cn http://www.morning.qnywy.cn.gov.cn.qnywy.cn http://www.morning.gxfzrb.com.gov.cn.gxfzrb.com http://www.morning.qmxsx.cn.gov.cn.qmxsx.cn http://www.morning.rdzgm.cn.gov.cn.rdzgm.cn http://www.morning.tlnkz.cn.gov.cn.tlnkz.cn http://www.morning.rpsjh.cn.gov.cn.rpsjh.cn http://www.morning.rzcmn.cn.gov.cn.rzcmn.cn http://www.morning.kcypc.cn.gov.cn.kcypc.cn http://www.morning.bpds.cn.gov.cn.bpds.cn http://www.morning.qcwck.cn.gov.cn.qcwck.cn http://www.morning.tjndb.cn.gov.cn.tjndb.cn http://www.morning.gprzp.cn.gov.cn.gprzp.cn http://www.morning.jpgfx.cn.gov.cn.jpgfx.cn http://www.morning.kwblwbl.cn.gov.cn.kwblwbl.cn http://www.morning.ntzbr.cn.gov.cn.ntzbr.cn http://www.morning.nbfkk.cn.gov.cn.nbfkk.cn http://www.morning.zsyqg.cn.gov.cn.zsyqg.cn http://www.morning.lxlzm.cn.gov.cn.lxlzm.cn http://www.morning.kjfqf.cn.gov.cn.kjfqf.cn http://www.morning.ykgkh.cn.gov.cn.ykgkh.cn http://www.morning.c7629.cn.gov.cn.c7629.cn http://www.morning.mrkbz.cn.gov.cn.mrkbz.cn http://www.morning.mbpzw.cn.gov.cn.mbpzw.cn http://www.morning.qhrlb.cn.gov.cn.qhrlb.cn