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

淄博企业网站建设建设二手商品网站总结

淄博企业网站建设,建设二手商品网站总结,上海高端网站搭建,网站主页没有关键词一、类对象C 在 C 语言的基础上增加了面向对象编程#xff0c;C 支持面向对象程序设计。类是 C 的核心特性#xff0c;通常被称为用户定义的类型。类提供了对象的蓝图#xff0c;所以基本上#xff0c;对象是根据类来创建的。声明类的对象#xff0c;就像声明基本类型…一、类对象C 在 C 语言的基础上增加了面向对象编程C 支持面向对象程序设计。类是 C 的核心特性通常被称为用户定义的类型。类提供了对象的蓝图所以基本上对象是根据类来创建的。声明类的对象就像声明基本类型的变量一样。下面是一些针对类这一概念的知识记忆点。类的概念首先是数据的算法操作结合构成一个不可分割的整体对象。其次在这个整体中一些成员是保护的他们被有效的屏蔽以防外界的干扰和误操作。另一些成员是公共的他们作为接口提供给外界使用。一个类的所有对象调用的成员函数都来自于同一代码段在调用成员函数的时候其实传递了相应对象的指针。类的作用域是指类定义和相应成员函数定义的范围。类型名与非类型名在同一作用域之间可以重名。一个类的默认访问控制符为private。private和Product在访问控制的时候是一样的。class Line// 类名 {public: //访问修饰符void setLength( double len );double getLength( void );//变量Line(double len); // 这是构造函数private:double length;//方法 };// 成员函数定义包括构造函数 Line::Line( double len) {cout Object is being created, length len endl;length len; }void Line::setLength( double len ) {length len; }double Line::getLength( void ) {return length; } // 程序的主函数 int main( ) {Line line;/声明Line类的对象line// 设置长度line.setLength(6.0); cout Length of line : line.getLength() endl;return 0; }二、构造析构函数类的构造函数与析构函数是类的一种特殊的成员函数每次创建类的新对象时执行构造函数每个删除所建立的对象时执行析构函数。下面是一些笔者在学习此知识点时的一些笔记。析构函数也是特殊的类成员函数它没有返回类型没有参数不能随意调用也没有重载只是在类对象生命周期结束的时候由系统自动调用。析构函数以调用函数相反的顺序被调用。构造函数能够给参数配置默认值如果为类定义了一个带参数的构造函数还想要无参的构造函数则必须自己定义。为解决成员变量初始值的问题包括成员变量为对象可在构造函数后添加:运算符并可以用分开。表示初始化的参量。在包含对象成员的类对象创建的时候需要对象成员的创建相应的调用对象成员的构造函数。然而构造对象成员的顺序要看类中的声明顺序而不是看构造函数说明中冒号后面成员初始化的顺序。C::C( double a, double b, double c): X(a), Y(b), Z(c) {.... }我们从更深层次的数据存储以及对象间相互赋值的底层原理了解一下堆与拷贝构造函数的相关概念如下全局变量静态数据常量存放在全局数据区所有类成员函数和非成员函数存放在代码区为运行函数而分配的局部变量函数参数返回数据返回地址等存放在栈区余下的空间都被作为堆区。new是为一个固定的数据类型在堆内申请一段空间包含数据的构造这个过程。从堆上分配对象数组只能调用默认的构造函数不能调用其他任何构造函数。在默认拷贝构造函数中拷贝的策略是逐个成员依次拷贝。拷贝构造函数的形参为类型的引用。如果你的类需要一个析构函数来析构资源则它也需要一个拷贝构造函数深拷贝与浅拷贝的区别是在拷贝构造函数是否申请了资源。在返回值为对象的时候会产生临时对象临时对象在整个创建他们的外部表达式范围内有效。三、静态成员与友元我们可以使用 static 关键字来把类成员定义为静态成员。类定义中函数原型前使用关键字 friend来声明为一个类的友元函数。下面是一些针对静态成员以及友元的概念详解。静态成员只与类相联系。静态数据成员在类声明外分配空间和初始化。一个静态成员函数不与任何对象联系故不能对非静态成员进行默认访问。(静态成员函数和非静态成员函数的本质区别是静态成员函数没有this指针)。友元是独立的函数不是类的成员函数。友元的添加是为了提高效率防止成员函数的反复调用。友元函数同时在两个类中生命即可以访问两个类中的内容。一个类的成员函数可以是另一个类的友元。整个类可以使另一个类的友元。友类的每个成员函数都可访问另一个类中的保护或私有数据成员。四、继承面向对象程序设计中最重要的一个概念是继承。继承允许我们依据另一个类来定义一个类这使得创建和维护一个应用程序变得更容易。这样做也达到了重用代码功能和提高执行效率的效果。当创建一个类时您不需要重新编写新的数据成员和成员函数只需指定新建的类继承了一个已有的类的成员即可。这个已有的类称为基类新建的类称为派生类。继承代表了一种包含关系。例如哺乳动物是动物狗是哺乳动物因此狗是动物等等。4.1继承基本概念多态性函数接收的形参是基类而实参如果是父类则还是调用父类的重载函数函数声明一模一样。这样就导致函数内调用的函数会发生多态用迟后联编或者叫滞后联编来确定到底用哪个函数。含有父类的子类布局上This指针先指向父类数据部分后指向子类数据部分。若语言不能支持多态则不能称之为面向对象的。多态性增加了一些数据存储和执行指令的代价。有一种例外如果基类中的虚函数返回一个基类指针或返回一个基类的引用子类中的虚函数返回一个子类的指针或者子类的引用则C将其视为同名虚函数而进行迟后联编。一个类中的将所有的成员函数都尽可能地设置为虚函数对编程固然方便JAVA语言中正是这样做的但是会增加一些时空上的开销。对于C来说在对性能上有偏激追求的编程中只选择设置个别成员函数为虚函数。只有类的成员函数才能说明为虚函数静态成员函数不能是虚函数this指针加虚函数列表实现多态内联函数不能为虚函数。构造函数不能是虚函数析构函数可以是虚函数并且通常声明为虚函数。多态性虽然可以解决类的冗余但是为了解决类的冗余而可以制造包含关系将使问题往不可控制的方向发展。类的分解才是更好解决冗余的方法将两个冗余的类根据冗余部分再抽象一个类再让这两个冗余的类继承这个抽象出来的类。具有纯虚函数的类为抽象类其并不能构造一个具体的类。纯虚函数是在积累中为子类保留一个位置以便子类用自己的实在函数定义来覆盖之如果在基类中没有保留位置则就没有覆盖。保护的访问权限对于派生类来说是共有的而对于其他对象来说是私有的派生类也不能访问基类中私有的数据成员和成员函数。4.2多重继承多重继承指的是一个类可以同时继承多个 类 比如A类继承自B类和C类这就是多重继承。下面是对继承更多相关概念的一些详解。在多重继承的时候出现名称的冲突需要说明基类对象名.基类名.成员函数或者成员变量虚拟继承的虚拟和虚拟函数的虚拟没有任何关系虚拟继承的作用就是如果还没有基类则加入一个基类的拷贝否则就用有的那个基类。任何虚拟函数基类的构造函数按照他们被继承的顺序构造。任何非虚拟基类的构造函数按照他们被继承的顺序构造。任何成员对象的构造函数按照他们声明的顺序调用。类自己的构造函数。在继承的关系中基类的private成员不但对应用程序隐藏甚至对派生类也隐藏。而基类的保护成员则只对应用程序隐藏而对派生类毫不隐瞒。一个私有的或保护的派生类不是子类程序不能接受其变为子类引用去传递给函数形参。.在无继承的类中protected和private控制符是没有区别的。在继承中基类的private对所有的外界都屏蔽包括自己的派生类基类的protected控制符对应用程序是屏蔽的但对其派生类是可访问的。下面是针对继承概念的一个简单C实现:#include iostreamusing namespace std;// 基类 class Shape {public:void setWidth(int w){width w;}void setHeight(int h){height h;}protected:int width;int height; };// 派生类 class Rectangle: public Shape {public:int getArea(){ return (width * height); } };int main(void) {Rectangle Rect;Rect.setWidth(5);Rect.setHeight(7);// 输出对象的面积cout Total area: Rect.getArea() endl;return 0; }五、运算符重载您可以重定义或重载大部分 C 内置的运算符。这样您就能使用自定义类型的运算符。重载的运算符是带有特殊名称的函数函数名是由关键字 operator 和其后要重载的运算符符号构成的。与其他函数一样重载运算符有一个返回类型和一个参数列表。下面的代码将针对Box加法运算符进行了重载用于把两个 Box 对象相加返回最终的 Box 对象。// 重载 运算符用于把两个 Box 对象相加Box operator(const Box b){Box box;box.length this-length b.length;box.breadth this-breadth b.breadth;box.height this-height b.height;return box;}下面是一些与运算符重载的相关概念详解运算符是函数除了运算顺序和优先级不能修改之外参数和返回值类型是可以重新说明的即可以重载重载的形式是返回类型 operator 运算符号参数说明。运算符重载作为成员函数在声明和第一时形式上少了一个参数这是由于C对所有的成员函数隐藏了第一个参数this。return *this 当返回值为引用的时候。后增量返回的是原有对象值的临时对象。C约定在增量运算符定义中放上一个整数形参就是后增量运算符。前增量运算符返回引用后增量运算符返回值。转换运算符将对象转换成类型名规定的类型。operator double(){};寻找的次序1.寻找成员函数的运算符2寻找非成员函数的运算符。3.由于存在内部运算符operator (double,double);所以假定匹配其程序中的算法。4.寻找能将实参RMB对象转化为double型的转换运算符operator double。转换运算符与转换构造函数互逆。例如类名double转换构造函数将double转换为RMB而RMBoperator double将RMB转换成double。转换运算符没有返回值。拷贝构造函数和赋值运算符区别在类的对象是否已经存在。赋值运算符符实现之前释放已有对象所占用的资源。六、I/O流C的IO流特指以流的方式进行输入输出的ISO/ANSI标准C库的输入输出类库也就是专门负责处理IO操作的一套系统。 任何需要传递的数据都要经过这套系统的处理 。下面是我对C的I/O流的一些个人理解。写到cerr上的信息是不能被重定向的。.I/O标准流类:头文件为iostream.h;C的名字为cin,cout,cerr,clog。文件流类头文件fstream.h,ofstream,ifstream,fstream。串流类头文件strstrea.h。ostrstreamistrstreamstrstream。控制符用流对象的成员函数控制输出的格式用控制符。流成员函数的优点是可以返回以前的设置便于恢复设置。5.控制符用流对象的成员函数控制输出的格式用控制符。流成员函数的优点是可以返回以前的设置便于恢复设置。cin遇到空格等分隔符就会为一个接收单元getline为cin的成员函数能够读取已整行的文本。cin.get不跳过任何空白字符。6.cin遇到空格等分隔符就会为一个接收单元getline为cin的成员函数能够读取已整行的文本。cin.get不跳过任何空白字符。七、模板模板是泛型编程的基础泛型编程即以一种独立于任何特定类型的方式编写代码。模板是创建泛型类或函数的蓝图或公式。库容器比如迭代器和算法都是泛型编程的例子它们都使用了模板的概念。每个容器都有一个单一的定义比如 向量我们可以定义许多不同类型的向量比如 vector int 或 vector string。我们可以使用模板来定义函数和类接下来是我记录的一些个人理解。用函数模板可以将许多重载函数简单的归为一个。要是重载函数和模板函数同时存在则先进行重载函数的匹配然后再寻求模板的匹配。模板类template class T class 类名{这里边就用T来表示这个数据类型}之后的里边成员函数的实现template class T 返回值 类名T::函数名形参。使用类的模板方法1在程序开始的头文件说明模板的定义。2在适当的地方创建一个模板类的实例编译发现正在创建一个类模板对象的时候便会创建该模板类的定义同时创建对应的对象实体。3有了对象名以后的使用就和通常一样但是要记住你规定了什么类型的模板类在使用成员函数的时候所赋的实参也要对应该类型。下面的实例定义了类 Stack并实现了泛型方法来对元素进行入栈出栈操作#include iostream #include vector #include cstdlib #include string #include stdexceptusing namespace std;template class T class Stack { private: vectorT elems; // 元素 public: void push(T const); // 入栈void pop(); // 出栈T top() const; // 返回栈顶元素bool empty() const{ // 如果为空则返回真。return elems.empty(); } }; template class T void StackT::push (T const elem) { // 追加传入元素的副本elems.push_back(elem); } template class T void StackT::pop () { if (elems.empty()) { throw out_of_range(Stack::pop(): empty stack); }// 删除最后一个元素elems.pop_back(); } template class T T StackT::top () const { if (elems.empty()) { throw out_of_range(Stack::top(): empty stack); }// 返回最后一个元素的副本 return elems.back(); } int main() { try { Stackint intStack; // int 类型的栈 Stackstring stringStack; // string 类型的栈 // 操作 int 类型的栈 intStack.push(7); cout intStack.top() endl; // 操作 string 类型的栈 stringStack.push(hello); cout stringStack.top() std::endl; stringStack.pop(); stringStack.pop(); } catch (exception const ex) { cerr Exception: ex.what() endl; return -1;} }八、异常异常是程序在执行期间产生的问题。C 异常是指在程序运行时发生的特殊情况比如尝试除以零的操作。异常提供了一种转移程序控制权的方式。C 异常处理涉及到三个关键字try、catch、throw。当问题出现时程序会抛出一个异常。这是通过使用 throw 关键字来完成的。try 块中放置可能抛出异常的代码catch 关键字用于捕获异常。下面是笔者在学习这段内容时候的一些笔记错误一种为编译错误另一种为运行中发现的错误它分为不可预测的逻辑错误和可以预测的运行异常。在c中异常是指从发生问题的代码区域传递到处理问题的代码区域的一个对象。.C只理会受监控过程之异常在try块之后必须紧跟一个或多个catch语句目的是对发生的异常进行处理。catch()括号中的声明只能容纳一个形参当类型与抛掷异常的类型匹配的时候该catch块便称捕获了一个异常而转到其块中进行异常处理。异常的规则1任意数量的catch分程序立即出现在try分程序之后在try分程序出现之前不能出现这些catch程序块。2跟在Catch之后圆括号中必须包含有数据类型捕获是利用数据类型匹配实现的。3如果一个函数抛一个异常但是在通往异常处理函数的调用链中找不到与之匹配的catch则该程序调用一个abort函数终止调用。这个参数必须是严格匹配4.如果catch分程序执行完毕则跟随最后catch分程序的代码如果有的话就被执行。一个对象不含数据成员则没有必要给捕获对象一个名字。抛掷的异常如果在try内正常匹配catch语句如果不在则向上游的catch语句去匹配。如果上游也没有则C将执行默认的异常处理函数。
http://www.hkea.cn/news/14349764/

相关文章:

  • 网站品牌建设方案绍兴公司企业名单
  • 重庆市建立网站的网络公司百度应用商店app下载安装
  • 网站建设 中国联盟网wordpress投稿申请
  • 项目定制开发网站网页设计动态效果
  • 海城建设网站wordpress插件扫描
  • 医学分类手机网站模版厂房装修公司深圳
  • 做网站没有创意房地产网站开发公司电话
  • 帮助网站源码中山建设安监站网站
  • 什么学习网站建设四川seo哪家好
  • 源汇区建设局网站网页设计培训机构学什么好
  • 百度云虚拟主机如何建设网站奉贤网站建设推广
  • 东莞部门网站建设网络公司+网站建设+小程序
  • 佛山网站建设做导航网站电脑设备
  • 外卖网站建设费用网站策划书的撰写流程?
  • 宠物网站建设方案怎样推广一个网站
  • 天津红桥网站建设电子商城网站制作公司
  • 桂林北站到桂林站多远如何做书签网站
  • 红谷滩园林建设集团有限公司 网站x站源码免费分享
  • 朝阳住房和城乡建设官方网站企业网站制作是什么
  • 两学一做网站链接做网站备案必须是个人还是公司
  • 网站备案的要求是什么样的网站建设策划方案书下载
  • 各网站特点wordpress 取消置顶
  • wordpress网站类型小程序模板做视频网站
  • 怎样自己做商场网站p2p网站建设源码
  • 网站建设书本sem培训学校
  • 中关村在线网站的建设酒店网站搜索引擎优化方案
  • 怎么对网站的数据库做管理安徽建设工程信息网上查询
  • 谷歌seo站内优化做网站有哪些流程
  • 网站外部链接怎么做猎头公司全称
  • 企业网站源码进一品资源网北京制作网站多少钱