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

高端公司网站建设网站推广有哪些方法

高端公司网站建设,网站推广有哪些方法,徐州推广网络营销公司,文档管理软件目录一、面向过程和面向对象初步认识二、类的引入三、类的定义四、类的访问限定符及封装4.1、访问限定符4.2、封装五、类的作用域六、类的实例化七、类对象的大小八、this指针8.1、this指针的引出8.2、this指针的特性8.3、C语言和C实现Stack的对比一、面向过程和面向对象初步认… 目录一、面向过程和面向对象初步认识二、类的引入三、类的定义四、类的访问限定符及封装4.1、访问限定符4.2、封装五、类的作用域六、类的实例化七、类对象的大小八、this指针8.1、this指针的引出8.2、this指针的特性8.3、C语言和C实现Stack的对比一、面向过程和面向对象初步认识 C语言是面向过程的关注的是过程分析求解问题的步骤通过函数调用逐步解决问题。 C是基于面向对象的关注的是对象将一件事情拆分成不同的对象靠对象之间的交互完成。 二、类的引入 C语言结构体中只能定义变量在C中结构体不仅可以定义变量还可以定义函数。比如在数据结构中用C语言实现栈结构体中只能定义变量但是以C的方式实现会发现struct中还可以定义函数。 代码如下 //C语言实现栈 typedef int STDatatype; typedef struct Stack {STDatatype* a;int capacity; //容量int top; //栈顶 }ST;//C实现栈 typedef int DataType; struct Stack {void Init(size_t capacity){_array (DataType*)malloc(sizeof(DataType) * capacity);if (nullptr _array){perror(malloc申请空间失败);return;}_capacity capacity;_size 0;}void Push(const DataType data){// 扩容_array[_size] data;_size;}DataType Top(){return _array[_size - 1];}void Destroy(){if (_array){free(_array);_array nullptr;_capacity 0;_size 0;}}DataType* _array;size_t _capacity;size_t _size; };三、类的定义 class className {};class为定义类的关键字className为类的名字{ } 中为 类的主体注意类定义结束时后面分号不能省略。 类体中内容为类的成员 类中的变量称为类的属性或成员变量类中的函数称为类的方法或者成员函数。 类的两种定义方式 声明和定义全部放在类体中需注意成员变量如果在类中定义编译器可能会将其当成内联函数处理。 //声明和定义全部放在类体中class personal { public:void show(){cout _name - _sex - _age endl;} public:char* _name;char* _sex;int _age; };类声明放在 .h 文件中成员函数定义放在 .cpp 文件中注意成员函数名前需要加类名 :: //test.h文件 class personal { public:void show(); public:char* _name;char* _sex;int _age; };//.cpp文件 #include test.h void personal::show() {cout _name - _sex - _age endl; }成员变量命名规则的建议 // 首先我们看看这个函数是不是很僵硬 class Date { public:void Init(int year){// 这里的year到底是成员变量还是函数形参year year;} private:int year; };// 所以一般都建议这样 class Date { public:void Init(int year){_year year;} private:int _year; };// 或者这样 class Date { public:void Init(int year){mYear year;} private:int mYear; };四、类的访问限定符及封装 4.1、访问限定符 C实现封装的方式用类将对象的属性与方法结合在一起让对象更加完善通过访问权限选择性的将其接口提供给外部的用户使用。 访问限定符说明 public修饰的成员在类外可以直接访问。protected和private修饰的成员在类外不能直接被访问此处protected和private是类似的。访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现为止。如果后面没有访问限定符作用域就到 } 就结束。class的默认访问权限为privatestruct为public因为struct要兼容C。 注意 访问限定符只在编译时有用当数据映射到内存后没有任何访问限定符上的区别。 【面试题】 问 C中struct和class的区别是什么 解答 C需要兼容C语言所以C中的struct可以当成结构体使用C中的struct还可以用来定义类和class定义的类是一样的区别就是struct定义的类默认访问权限是publicclass定义的类默认访问权限是private。 4.2、封装 封装将数据和操作数据的方法进行有机结合隐藏对象的属性和实现细节仅对外公开接口来和对象进行交互。 封装本质上是一种管理让用户更方便使用类。例如对于电脑提供给用户的就只有开关机键通过键盘输入显示器UBS插孔等让用户和计算机进行交互完成日常事务但实际上电脑真正工作的是CPU、显卡、内存等一些硬件元件。 对于计算机使用者而言不用关心内部核心部件比如主板上线路是如何布局的CPU内部是如何设计的等用户只需要知道怎么开机、怎么通过键盘和鼠标与计算机进行交互即可。因此计算机厂商在出厂时在外部套上壳子将内部实现细节隐藏起来仅仅对外提供开关机、鼠标以及键盘插孔等让用户可以与计算机进行交互即可。 C实现封装可以通过类将数据以及操作数据的方法进行有机结合通过访问权限来隐藏对象内部实现细节控制哪些方法可以在类外部直接被使用。 五、类的作用域 类定义了一个新的作用域类的所以成员都在类的作用域中在类体外定义成员时需要使用 :: 作用域操作符指明成员属于哪个类域。 class personal { public:void show(); private:char _name[20];char _gender[3];int _age; };// 这里需要指定show是属于personal这个类域 void personal::show() {cout _name _gender _age endl; }六、类的实例化 用类的类型创建对象的过程称为类的实例化 类是对象进行描述的是一个模型一样的东西限定了类有哪些成员定义出一个类并没有分配实际的内存空间来存储它。比如入学是填写的学生信息表表格就可以看成是一个类来描述具体学生的信息。一个类可以实例化多个对象实例化出的对象占用实际的物理空间存储类成员变量做个比方。类实例化出对象就像现实中使用建筑设计图建造出房子类就像是设计图只设计出需要什么东西但是并没有实体的建筑存在同样类也只是一个设计实例化出的对象才能实际存储数据占用物理空间。 class personal { public:void show(); private:char* _name; //姓名char* _sex; //性别int _age; //年龄 }; void test() {personal p1;p1._name jack;p1._age 15;p1._sex 男;p1.show(); }七、类对象的大小 类中既可以有成员变量有可以有成员函数那么一个类的对象中包含了什么如何计算类对象的大小呢 对于类对象的存储方式有以下几种猜测 对象中包含类的各个成员 缺陷每个对象中的成员变量是不同的但是调用同一份函数如果按照此种方式存储当一个类创建多个对象时每个对象中都会保存一份代码相同代码保存多次浪费空间。 代码只保存一份在对象中保存存放代码多得地址 只保存成员变量成员函数存放在公共的代码段 对于上述的三种问题我们可以通过对下面的不同对象分别计算大小来分析 // 类中既有成员变量又有成员函数 class A1 { public:void f1() {} private:int _a; };// 类中仅有成员函数 class A2 { public:void f2() {} };// 类中什么都没有---空类 class A3 {};结论一个类的大小实际就是该类中 “成员变量” 的和注意计算的时候要内存对齐和结构体内存对齐一样。 注意空类的大小编译器给了空类一个字节来唯一标识这个类的对象。 内存对齐的规则 第一个成员在与结构体偏移量为0的地址处。 其他成员变量要对齐到某个数字对齐数的整数倍的地址处。 注意对齐数 编译器默认的一个对齐数 与 该成员大小的较小值。 VS中默认的对齐数为8 结构体总大小为最大对齐数所有变量类型最大者与默认对齐参数取最小的整数倍。 如果嵌套了结构体的情况嵌套的结构体对齐到自己的最大对齐数的整数倍处结构体的整体大小就是所有最大对齐数含嵌套结构体的对齐数的整数倍。 八、this指针 8.1、this指针的引出 我们先来定义一个日期类Date class Date { public:void Init(int year, int month, int day){_year year;_month month;_day day;}void Print(){cout _year - _month - _day endl;} private:int _year; // 年int _month; // 月int _day; // 日 }; int main() {Date d1, d2;d1.Init(2022, 1, 11);d2.Init(2022, 1, 12);d1.Print();d2.Print();return 0; }对于上述类有这样的一个问题 Date类中有 Init 与 Print 两个成员函数函数体中没有关于不同对象的区分那当d1调用 Init 函数时该函数是如何知道应该设置d1对象而不是设置d2对象呢 C中通过引入this指针解决该问题即C编译器给每个“非静态的成员函数“增加了一个隐藏的指针参数让该指针指向当前对象(函数运行时调用该函数的对象)在函数体中所有 “成员变量” 的操作都是通过该指针去访问。只不过所有的操作对用户是透明的即用户不需要来传递编译器自动完成。 8.2、this指针的特性 this指针的类型类类型* const即成员函数中不能给this指针赋值。 只能在“成员函数”的内部使用。 this指针本质上是“成员函数”的形参当对象调用成员函数时将对象地址作为实参传递给this形参。所以对象中不存储this指针。 this指针是“成员函数”第一个隐含的指针形参一般情况由编译器通过ecx寄存器自动传递不需要用户传递。 8.3、C语言和C实现Stack的对比 1、C语言实现 typedef int STDatatype; typedef struct Stack {STDatatype* a;int capacity;int top; }ST; void StackInit(ST* ps) {assert(ps);ps-a (STDatatype*)malloc(sizeof(STDatatype) * 4);if (ps-a NULL){perror(malloc fail);exit(-1);}ps-top -1;ps-capacity 4; }void StackDestroy(ST* ps) {assert(ps);free(ps-a);ps-a NULL;ps-top -1;ps-capacity 0; }void StackPush(ST* ps, STDatatype x) {assert(ps);if (ps-top 1 ps-capacity){STDatatype* tmp (STDatatype*)realloc(ps-a, ps-capacity * 2 * sizeof(STDatatype));if (tmp NULL){perror(realloc fail);exit(-1);}ps-a tmp;ps-capacity * 2;}ps-top;ps-a[ps-top] x; }void StackPop(ST* ps) {assert(ps);assert(!StackEmpty(ps));ps-top--; }STDatatype StackTop(ST* ps) {assert(ps);assert(!StackEmpty(ps));return ps-a[ps-top]; }bool StackEmpty(ST* ps) {assert(ps);return ps-top -1; }int StackSize(ST* ps) {assert(ps);return ps-top 1; } int main() {Stack s;StackInit(s);StackPush(s, 1);StackPush(s, 2);StackPush(s, 3);StackPush(s, 4);printf(%d\n, StackTop(s));printf(%d\n, StackSize(s));StackPop(s);StackPop(s);printf(%d\n, StackTop(s));printf(%d\n, StackSize(s));StackDestroy(s);return 0; }可以看到在用C语言实现时Stack相关操作函数有以下共性 每个函数的第一个参数都是Stack* 函数中必须要对第一个参数检测因为该参数可能会为NULL 函数中都是通过Stack*参数操作栈的 调用时必须传递Stack结构体变量的地址 结构体中只能定义存放数据的结构操作数据的方法不能放在结构体中即数据和操作数据的方式是分离开的而且实现上相当复杂一点涉及到大量指针操作稍不注意可能就会出错。 2、C实现 typedef int DataType; class Stack { public:void Init(){_array (DataType*)malloc(sizeof(DataType) * 3);if (NULL _array){perror(malloc申请空间失败!!!);return;}_capacity 3;_size 0;} void Push(DataType data){CheckCapacity();_array[_size] data;_size;}void Pop(){if (Empty())return;_size--;}DataType Top() { return _array[_size - 1]; }int Empty() { return 0 _size; }int Size() { return _size; }void Destroy(){if (_array){free(_array);_array NULL;_capacity 0;_size 0;}} private:void CheckCapacity(){if (_size _capacity){int newcapacity _capacity * 2;DataType* temp (DataType*)realloc(_array, newcapacity * sizeof(DataType));if (temp NULL){perror(realloc申请空间失败!!!);return;}_array temp;_capacity newcapacity;}} private:DataType* _array;int _capacity;int _size; }; int main() {Stack s;s.Init();s.Push(1);s.Push(2);s.Push(3);s.Push(4);printf(%d\n, s.Top());printf(%d\n, s.Size());s.Pop();s.Pop();printf(%d\n, s.Top());printf(%d\n, s.Size());s.Destroy();return 0; }C中通过类可以将数据以及操作数据的方法进行完美结合通过访问权限可以控制哪些方法在类外可以被调用即封装在使用时就像使用自己的成员一样更符合人类对一件事物的认知。而且每个方法不需要传递Stack*的参数了编译器编译之后该参数会自动还原即C中 Stack * 参数是编译器维护的C语言中需用户自己维护。
http://www.dnsts.com.cn/news/254247.html

相关文章:

  • 网站的管理dw设计网页教程
  • 专门做图片剪影的网站怎么做漫画网站
  • 长沙网站建设王道下拉棒网站 缓存什么时候使用
  • 资讯网站模板发布网站搭建教程
  • 小程序开发 网站建设谈谈对seo的理解
  • 企业商城建站网站建设方面的知识
  • 技校网站建设与维护课程教学总结旅游网站建设技术有哪些方面
  • 做网站定金是多少钱福田企业网站推广哪个好
  • 上海 培训网站建设怎么自己开发微信小程序
  • 1688网站店招怎么做网页美术设计主要学什么
  • 贵州网站建设公司工友洗手粉网站建设中
  • 长春网站建设费用北京中小企业网站建设公司
  • 飞卢盗版做的最好的网站页面优化诊断
  • 学做网站教程网络营销有哪些营销方式
  • 遵义住建局查询网站免费网站建设网站推广
  • 毕设做网站什么主题比较好网站建设用什么软件比较好
  • 嘉兴做网站上海做网站cnsosu
  • 企业做网站需要在通管局备案广州手机app开发
  • 图片网站如何做百度排名成都市公园城市建设局网站
  • 网站结构有哪些类型微信开发网站建设程序
  • 东莞城乡住房建设厅网站做外贸网站的都有哪些类型的公司
  • 成都大型商城网站建设外贸网站建设广州
  • 个人网站的制作论文莱州人社局网站
  • 凡科网做网站花多少钱做细分领域的同城网站
  • 专业网站设计报价深圳建网站哪个公
  • 网站制作与管理技术...html 好的网站
  • 网站稳定期怎么做佛山市 骏域网站建设
  • 做网站的叫什么职位wordpress4.0 伪静态
  • 做网站的是什么工程师网页设计公司哪个好
  • 简单的网站php开发教程室内设计平面图上色