Day4:构造函数和析构函数

35 篇文章 4 订阅
订阅专栏
本文详细介绍了C++中的构造函数、析构函数、拷贝构造、深浅拷贝以及对象初始化等概念。重点讲解了构造函数的默认、重载与委托,析构函数的自动调用,拷贝构造函数的使用场景,以及深拷贝与浅拷贝的区别。此外,还探讨了对象生命周期、初始化列表和成员初始化的重要性。
摘要由CSDN通过智能技术生成

构造函数 

构造函数无返回值,函数名需要和类名相同才行。

默认的构造函数无参数。

构造函数的作用,和构造函数的重载(与普通函数的重载不同,需要进行赋初值才行)

delete删除默认的构造函数数。(一旦自己构造后,默认的构造函数就没了)

gf()=delete;

用gf()=default;听说运行更快(这才是默认初始构造函数)

#include<iostream>

using namespace std;


class gf
{
public:
	//gf(string mname="abc", int mage=12)
	//{
	//	name = mname;
	//	age = mage;
	//}
	合理利用函数的缺省,等效与下面的代码
	gf();
	gf(string mname);
	gf(string mname, int mage);
protected:
	string name;
	int age;
private:
};
int main()
{
	gf kk;
	gf kk2("dad", 21);
	gf kk3("nda", 13);
	return 0;
}

初始化参数列表的写法:(灵活)(在构造函数的时候写)

(也就是在类中用)(所以也可以类中声明,类外实现)

(好处:自动识别形参和实参,名字可以起相同的)

(不一定所有的东西都要在初始化参数列表中实现,也可以同时在数据成员中实现)

string myname ="me";//
class pig
{
public:
	pig(string mname, int mage) : name(mname), age(mage)
	{
		cout << "初始化参数列表" << endl;
		//继承和类的组合必须采用初始化参数列表的写法
	}
	pig(int bage):name(myname),age(bage){}
	//这样写也是可以的,从全局区拿一个变量给他赋值 (灵活)
protected:
	string name;
	int age;
};

委托构造:(一个构造函数调用另一个构造函数)

作用:这样就不需要自己在手动去初始化(相当于给了个初值),也可以自己去

class cat 
{
public:
	cat(string name,int age):name(name),age(age){}
	cat() :cat("小猫咪", 5) {}//自己不做初始化
	//委托构造(C11之后才有的)
protected:
	string name;
	int age;
};

析构函数 

析构函数有默认、无返回值、无参数->不能被重载

 会自己在生命周期结束的时候自行调用

一般写到指针的时候,会需要自己手写一个(生命周期结束是自动调用释放内存的函数)。

class giegie
{
public:
	giegie(const char*str,int age):age(age)
	{
		char* name = new char[strlen(name) + 1];
		strcpy_s(name, strlen(name) + 1, str);
	}
	~giegie();
protected:
	char* name;
	int age;
};
//可以在类外实现类中的析构函数
giegie::~giegie()
{
	cout << "Im 析构函数" << endl;
	delete[]name;
	name = nullptr;
}
int main()
{
	{
		giegie wbm("wbm",18);
	}//出了这个大括号,wbm生命周期结束,自行调用析构收尾
	return 0;
}

一般不会手动调用(手动调用对象也不会“死”),因为你手动调用后再加上系统自行调用,会二次释放内存,引发中断报错。 

特别的,在new一个对象的时候需要加上delete才会调用析构函数。

int main()
{
	giegie* czr = new giegie{ "chenzongran",19 };
	//delete czr;
	czr = nullptr;
	return 0;
}

此处不用delete则不调用析构函数。 

加上后

 注意:补充说明下delete的用法:delete[] p可以写成delete p但反过来不行。

这里在new一个对象的时候,由于不是对象的数组,所以应该写成delete p而不是delete p[];

拷贝构造函数

①和构造函数写法相同,只不过操作对象是固定的(也就是对对象的引用),所以我们可以用一个对象给另一个对象初始化。

②特别的:匿名函数给人家初始化的话,需要加上const修饰。(相当于是一个右值了,常属性)

	giegie(giegie& wbm)//wbm是一个参数
	{
		age = wbm.age;
		name = wbm.name;
	}//构造出来的一个对象由括号里面的对象进行初始化

那么我们在主程序就可以这样写,来初始化一个成员对象

	giegie gzj("郭子杰", 19);
	giegie fangcao(gzj);

拿已经创建好的gzj来初始化fangcao

以上为一种显式调用

隐式调用

	giegie gzj("郭子杰", 19);
	giegie fangcao=gzj;

区分一下运算符重载:(先创建对象,在进行赋值)

giegie gzj("郭子杰", 19);
	giegie fangcao;
	fangcao = gzj;

匿名函数  (单独一个匿名对象,创建即死,应转交所有权,才不会调用析构函数而死亡)

(即无名)

class peg
{
public:
	peg(string name, int age) :name(name), age(age) {};
	peg(const peg& kk);//匿名构造一定要加上const
protected:
	int age;
	string name;
private:

};
int main()
{
	peg wbm=peg("匿名",130);
	return 0;
}

 函数两种传参方式:

①不传引用:(效率低,还会再次创建一个对象)

②传引用:效率高,取了个别名!!

class peg
{
public:
	peg(string name, int age) :name(name), age(age) {};
	peg(const peg& kk);//匿名构造一定要加上const
	void print()
	{
		cout << name << "\t" << age << endl;
	}
protected:
	int age;
	string name;
private:

};
void getdata1(peg wbm)//wbm是形参
{
	wbm.print();
}
void getdata2(peg& wbm)
	{
	wbm.print();
	}

两个getdata函数  第二种是更好的。

 深浅拷贝

①默认浅拷贝,但当有指针的时候,会导致拷贝的时候,指针指向同一块地址,导致析构问题(重复释放内存)。

正常用的都是浅拷贝。

深拷贝:(需要自己写拷贝函数,加上new和拷贝赋值的操作)->可以方便的解决浅拷贝问题

区别于仅改变指针的指向(应该是将值拷到新的内存里)->给一块新的内存,避免重复free

class peg
{
public:
	peg(const char* mname, int age) :age(age)
	{
		name = new char[strlen(mname) + 1];
		strcpy_s(name, strlen(mname) + 1, mname);
	}
	peg(const peg& kk);//匿名构造一定要加上const
	peg(peg& kkk)
	{
		name=new char[strlen(kkk.name) + 1];
		strcpy_s(name, strlen(kkk.name) + 1, kkk.name);
		age = kkk.age;
	}
	~peg()
	{
		cout <<"我是普通析构函数" << endl;
	}
	~peg()
	{
		cout << "我是特殊析构函数" << endl;
		delete[] name;
	}
protected:
	int age;
    char* name;
private:
};

这样就能有效解决了啦。 

构造与析构顺序问题:

  • 普通对象,构造顺序和析构顺序是相反

  • new出来的对象,delete会直接调用析构函数

  • static对象,当程序关闭的时候,生命周期才结束,所以是最后释放

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<string>
    
    using namespace std;
    class testOrder
    {
    public:
    	testOrder(string name, int age) :name(name), age(age) 
    	{
    		cout << name;
    	}
    	~testOrder()
    	{
    		cout << name;
    	}	
    protected:
    	int age;
    	string name;
    private:
    
    };
    
    int main()
    {
    	testOrder a("A", 21);
    	testOrder b("B", 11);
    	testOrder* p = new testOrder("K", 123);
    	static testOrder kk("X", 2);
    	delete p;
    	p = nullptr;//ABKXKBAX
    }

    C++结构体

  • ①权限默认是公有

  • ②类中有的,它也有,当析构构造一旦写了,就得当类来使用,包括初始化成员的使用。

  • ps:data()和c_str()的返回值是char*类型。

好问题:初始化成员累表是跟声明(在类里面)还是跟定义(放在类外)??

答:跟定义。如以下代码:声明可以不写初始化列表,只要在定义的时候写就行。(实际上也是函数体内的东西)

using namespace std;
class testOrder
{
public:
	testOrder(string name, int age);
	~testOrder()
	{
		cout << name;
	}
protected:
	int age;
	string name;
private:

};
testOrder::testOrder(string name, int age) : name(name), age(age)//相当于是函数内的东西
{
	cout << name << endl;
}
int main()
{
	testOrder kk("abc", 12);
}

写一个MyString类型:

有几个感触比较深的

①在vs2022中拷贝构造,用已创建好的对象构造新对象,需要在拷贝构造函数的参数里加上const修饰才行,否则会显示没有适合的拷贝构造函数。

②写代码的时候要细心,到底是给谁开辟空间,一开始给对象temp开辟空间了,应该是给temp的string_name开辟空间。

③用data()也就是函数名来代表一个数据成员,只需要return他就可以了

#include<iostream>
#include<string>
#include<cstring>

using namespace std;
class MyString
{
public:
	int strSize;
	//此处有指针,下面也需要有拷贝函数,那么我们应该采用深拷贝的方式,避免重复释放内存
	MyString(const char* name=" ")
	{
		strSize = strlen(name) + 1;
		string_name = new char[strSize];
		strcpy_s(string_name, strSize, name);
	}
	MyString(const MyString& mm)
	{
		strSize = mm.strSize;
		string_name = new char[strSize];
		strcpy_s(string_name, strSize, mm.string_name);
	}
	//data()和c_str()
	char* data()
	{
		return string_name;
	}
	char* c_str()
	{
		return string_name;
	}
	//append
	MyString append(const MyString& wbm)//append函数
	{
		MyString temp;
		temp.strSize = wbm.strSize + strSize - 1;//减去一string自带\0 这里包含了两个 所以可以减去一个
		temp.string_name = new char[temp.strSize];
		memset(temp.string_name, 0, temp.strSize);
		strcat_s(temp.string_name, temp.strSize, string_name);
		strcat_s(temp.string_name, temp.strSize, wbm.string_name);
		return temp;
	}
	int compare(const MyString& mm)
	{
		return strcmp(string_name, mm.string_name);
	}
	~MyString()
	{
		delete[]string_name;
		string_name = nullptr;
	}
protected:
	char* string_name;
};
int main()
{
	//功能一:
	MyString str1("Das");
	MyString str2("kasd");
	MyString str3 = "KASD";
	MyString str4(str1);
	//功能二
	cout << str2.data() << endl;
	cout << str2.c_str() << endl;
	//功能三append 连接功能
	MyString strOne = "one";
	MyString strTwo = "two";
	MyString strThree=strOne.append(strTwo);
	cout << strThree.data() << endl;	    //onetwo
	//功能四 compare函数
	cout << strOne.compare(strOne) << endl;
}

构造函数析构函数
蜗@牛的博客
05-03 1206
一、构造函数 构造函数构造函数是类的一个特殊的成员函数,名字与类名相同,创建类的类型对象时由编译器自动调用,保证每个数据成员都有 一个合适的初始值,并且在对象的生命周期内只调用一次。 构造函数是特殊的成员函数,构造函数的主要任务而是初始化对象。 特点: 1.构造函数的函数名与类名相同。 2.没有返回值。 3.对象实例化时编译器会自动调用对应的构造函数。 4.构造函数可以重载。 5. 如果类中没有...
C++实验三 构造函数析构函数
weixin_44940027的博客
01-03 802
一、实验目的: 进一步掌握C++中类设计的方法,掌握构造函数析构函数的作用,掌握几种不同的构造函数定义及调用方法。 二、实验内容: 运行教材上深复制与浅复制的实例(例题6-9,6-10),分析程序运行结果 2.运行以下程序,注意理解几种不同的构造函数的定义方法,以及何时被调用(包括默认构造函数(无参数),有参构造函数,拷贝构造函数)。 #include using namespace std; class Student { public: Student( ); //默认构造函数(无参数) S
C++13-STL模板
IT从业者的成长历程
05-20 699
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。
编写类string的构造函数析构函数和赋值函数
qq_21905401的博客
08-21 7583
#include using namespace std; class String { public: String(const char *str=NULL); //普通构造函数 String(const String &other); //复制构造函数 ~String(void); //析
详解C++ 编写String 的构造函数、拷贝构造函数析构函数和赋值函数
热门推荐
$firecat利白的代码足迹$
08-01 1万+
C++默认的拷贝构造函数和赋值构造函数都是浅拷贝,所以当遇到类成员含有指针变量时,就得自己实现深拷贝!~String();
面试改错题目
passion_wlz的专栏
12-10 558
今天群里jason哥们,发了一个编程改错题目,群里几众哥们一起讨论了下,最后看了答案还是有些失望。改错题目还是很有难度的。 1:  class User { 2:   char* m_name;  3:  public: 4:   User(char* name) 5:   { 6:   m_name = new char[strlen(name)]; 7:   strcpy(m_n
c/c++整理--引用和指针(5)
hjf161105的博客
04-08 259
一、什么是“野指针”   “野指针”不是NULL指针,而是指向“垃圾”内存的指针,其成因主要为:指针变量没有被初始化,或指针p被free或者delete之后,没有置为NULL。 二、“野指针”的危害 下面程序有什么重大的bug? short *bufptr; short bufarray[20]; short var = 0x20; *bufptr = var; bufarra
C++】:构造函数析构函数
2301_77900444的博客
04-23 1427
如果一个类中什么成员都没有,简称为空类。空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。默认成员函数用户没有显式实现,编译器会生成的成员函数称为默认成员函数。这篇文章介绍的是构造函数析构函数。1.一般情况下构造函数都需要我们自己显式的去实现。2.只有少数情况下可以让编译器自动生成构造函数。(类似用两个栈实现队列的MyQueue,它的成员都是自定义类型)
C++构造函数析构函数
qq_42849332的博客
09-29 281
一、构造函数 1、对象的初始化和构造函数 类是一种抽象的数据类型,它不占用存储空间,不能容纳具体的数据。因此在类声明中不能给数据成员赋初值。 例如:(错误) class Complex { double real=0; double imag=0; } 与使用变量一样,使用对象时也应该先定义,后使用。在定义对象时,对数据成员赋初值,称为初始化。 例如: class Complex { publi...
C++ 类与对象_构造函数析构函数 (带参数的构造函数,重载构造函数,复制构造函数
Foools的博客
11-06 740
系列文章目录 重新复习c++,所以把书中的重点内容整理成博客,尽量简洁,易懂。 文章目录系列文章目录前言一、带参数/不带参数的构造函数二、重载构造函数三、复制构造函数1.调用复制构造函数的时机2.浅复制和深复制 前言 当一个变量的生存期结束时,系统会自动回收这个存储单元,当建立一个用户定义的类类型对象时,也需要类似的工作,类体系结构复杂,建立对象的初始化工作和释放工作变化很大,需要用户自定义构造函数析构函数构造函数析构函数应该定义在公有部分,因为对象必须在类外创建和撤销。 一、带参数/不带参
C++学习之第三天-构造函数析构函数的执行顺序
weixin_49278191的博客
10-28 1634
Day3-构造函数析构函数 1.知识点总结: 共同点: a.在类中如果没有提供这两个函数,系统默认给这两个函数提供空实现。 b.构造函数析构函数必须声明在类全局的作用域(public)之下,否则外界是访问不到的 c.构造函数没有返回,也不用写void (1)构造函数---作用:初始化数据成员。 1.函数名与类名相同,可以有参数,可以发生重载 2.实例化对象时,由编译器自动调用一次,不需要手动调用 3.如何使用构造函数对数据成员进行初始化,注意初始化和赋值的区别。 ...
拷贝对象资源,this指针
show869566706的博客
10-13 339
#include using namespace std; class student { public: student(char *pName="no name",int ssID=0) {  id=ssID;  name=new char[strlen(pName)+1];  strcpy(name,pName);  cout }; void copy
C++ Primer Plus 第六版 第十二章课后编程练习答案
是鲤鱼啊
04-03 353
1.暂 2.暂 3. stock20.h //改自清单10.7 #ifndef STOCK20_H #define STOCK20_H #include <iostream> using namespace std; class Stock{ char * company;//要求用动态内存分配代替string类对象,所以string对象company必须改为char...
c/c++面试题集锦
09-27 8326
c/c++面试题集锦1.多态类中的虚函数表是Compile-Time,还是Run-Time时建立的?2.将一个 1M -10M 的文件,逆序存储到另一个文件,就是前一个文件的最后一个 字符存到新文件的第一个字符,以此类推。3.main主函数执行完毕后,是否可能会再执行一段代码?4.一个父类写了一个virtual 函数,如果子类覆盖它的函数不加virtual ,也能实现多态?在子类的空间里,有没有父
C++刷题】力扣-#121-买卖股票的最佳时机
会写代码的饭桶
10-16 642
给定一个数组 prices,其中 prices[i] 表示第 i 天的股票价格。假设你可以在第 i 天买入并在第 j 天卖出股票(i ≤ j),设计一个算法来计算你所能获取的最大利润。注意你只能持有一股股票,并且你不能同时参与多笔交易(即在再次买入前必须卖出股票)。
C++刷题】力扣-#118-杨辉三角
会写代码的饭桶
10-16 372
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。在杨辉三角中,每个数是它正上方两个数的和。
OpenGL Texture C++ Camera Filter滤镜视频录制
最新发布
wangyongyao1989的博客
10-19 914
​ OpenGL Texture C++ Camera Filter滤镜视频录制; 基于文章1/2/3的代码,结合Google开源项目grafika中的WindowSurface.java/Coregl.java/TextureMovieEncoder2.java/VideoEncoderCore.java创建出录制视频的surface并根据此切换GLContext上下文交换(swapBuffer)渲染与显示的视频数据,最终在VideoEncoderCore中通过MediaCodec获取出encodeDat
【C语言】指针与函数:传值与传址
我的我的博客
10-17 579
函数在使用的时候,给到的形式参数属于局部变量,仅在函数体内部有效。 1. 传值,对于两个值的交换,不影响函数调用之前的数值。这个就是传值,传递的是实参。 2. 传址,如果想通过函数来改变原本两个变量的值,那么需要传递地址。 3. 另外一种方式就是定义**全局变量**,参数不进行传递。可以直接实现在自定义函数体内,改变main函数中、或者其他函数中的值。
设计一个用于人事管理的People(人员)类。考虑到通用性,这里只抽象出所有类型人员都具有的属性:number(编号)、sex(性别)、birthday(出生日期)、id(身份证号)等等。其中"出生日期"定义为一个"日期"类内嵌子对象。用成员函数实现对人员信息的录入和显示。要求包括:构造函数析构函数、拷贝构造函数、内联成员函数、带缺省形参值的成员函数。
02-06
以下是一个可以满足要求的 People 类的示例: ``` class Date { private: int year, month, day; public: // 构造函数析构函数 Date(int y, int m, int d): year(y), month(m), day(d) {} ~Date() {} // 拷贝构造函数 Date(const Date& other): year(other.year), month(other.month), day(other.day) {} // 内联成员函数 inline int getYear() const { return year; } inline int getMonth() const { return month; } inline int getDay() const { return day; } // 带缺省形参值的成员函数 void setYear(int y = 1970) { year = y; } void setMonth(int m = 1) { month = m; } void setDay(int d = 1) { day = d; } }; class People { private: int number; char sex; Date birthday; string id; public: // 构造函数析构函数 People(int n, char s, const Date& b, const string& i): number(n), sex(s), birthday(b), id(i) {} ~People() {} // 拷贝构造函数 People(const People& other): number(other.number), sex(other.sex), birthday(other.birthday), id(other.id) {} // 内联成员函数 inline int getNumber() const { return number; } inline char getSex() const { return sex; } inline const Date& getBirthday() const { return birthday; } inline const string& getId() const { return id; } // 带缺省形参值的成员函数 void setNumber(int n = 0) { number = n; } void setSex(char s = 'M') { sex = s; } void setBirthday(const Date& b = Date(1970, 1, 1)) { birthday = b; } void setId(const string& i = "") { id = i; } }; ``` 以上的示例中,包括了构造函数析构函数、拷贝构造函数、内联成员函数以及带缺省形参值的成员函数。 构造函数析构函数
写文章

热门文章

  • c语言中bool的使用 78249
  • gets和puts基本用法。 12607
  • C++ string类型转化为int类型(两种方法) 8439
  • 10---OpenCV:图像进阶操作之连通区域分析 8318
  • Edge获取网页内置的pdf 8064

分类专栏

  • 上机 17篇
  • 保研面试/笔试 2篇
  • Java 2篇
  • 算法笔记 8篇
  • 在南邮 13篇
  • OpenCV 15篇
  • Linux 9篇
  • Machine Learning 13篇
  • 奇技 6篇
  • Python 35篇
  • MySQL 7篇
  • C++ 35篇
  • 随笔 20篇
  • C 10篇

最新评论

  • 指静脉的数据集增强

    2401_87386624: 怎么看到你详细资料

  • Leetcode 721.账户合并(hash+dfs)☆

    ha_lydms: 这篇博客真是太好了。让我在里面学习到了很多的知识,加油。

  • Leetcode 3098.求出所有子序列的能量和☆(DP/hash/状压/记忆化搜索)

    普通网友: 每当我阅读你的编程博客文章时,我总能感受到你的专业水平和耐心解答的精神。【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】

  • Python实现---南邮离散数学实验四:图的生成及欧拉(回)路的确定

    cloudzr: 你这是节点的一笔画,不是所有边的一笔画吧

  • Python实现---南邮离散数学实验四:图的生成及欧拉(回)路的确定

    cloudzr: 问题很多...

大家在看

  • 【机器学习】简单易懂的聚类算法K-Means 1249
  • 新质生产力为生物多样性监测与保护赋能
  • 【Java知识】Java进阶-服务发现机制SPI 677
  • 非法测绘事件频发,如何做好数据安全合规管理?
  • 如何使用CDN进行加速

最新文章

  • 计算机通信与网络实验笔记
  • Word中如何删除表格下一页的空白页
  • 图论算法(DFS/BFS/拓扑排序/最短路/最小生成树/二分图/基环树/欧拉路径)
2024年37篇
2023年39篇
2022年219篇
2021年40篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_Ocean__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家德安玻璃钢花盆花器郑州铸铜玻璃钢雕塑价格玻璃钢孔子雕塑报价大型雕塑玻璃钢模具制作中庭商场美陈供货商本溪玻璃钢雕塑厂家玻璃钢雕塑的成型制造金水区玻璃钢大型雕塑厦门玻璃钢卡通雕塑厂家定制辽宁火烈鸟玻璃钢雕塑生产厂家淇县玻璃钢雕塑学校玻璃钢人物雕塑艺术摆件商场美陈的概念和特点特色商场美陈哪家好南平模压法玻璃钢雕塑销售鄂尔多斯玻璃钢雕塑定制价格玻璃钢艺术品雕塑厂家欧式玻璃钢卡通雕塑尺寸山东玻璃钢树脂雕塑公司辽宁卡通玻璃钢雕塑厂家曲阳玻璃钢雕塑的制作苏州玻璃钢花盆厂家海南景观玻璃钢雕塑定做深圳泡沫玻璃钢雕塑哪家专业玻璃钢人像雕塑加工辰溪玻璃钢花盆花器玻璃钢人物雕塑制作工艺上海玻璃钢雕塑摆件厂家直销通辽景区玻璃钢雕塑价格定做异形玻璃钢雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化