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

手机网站自动跳转网站动画效果怎么做的

手机网站自动跳转,网站动画效果怎么做的,福州+网站开发,北京微信公众号在 C 中#xff0c;成员函数和成员变量的归属关系#xff08;即某个成员属于哪个类#xff09;是通过编译器的多种机制和语言特性来实现和管理的。理解这些机制有助于更深入地掌握 C 的面向对象特性、内存管理以及编译过程。以下是 C 如何确定某个成员函数或成员变量属于特定…在 C 中成员函数和成员变量的归属关系即某个成员属于哪个类是通过编译器的多种机制和语言特性来实现和管理的。理解这些机制有助于更深入地掌握 C 的面向对象特性、内存管理以及编译过程。以下是 C 如何确定某个成员函数或成员变量属于特定类的详细解释。 一、类定义与作用域解析 1. 类定义 在 C 中类的定义明确地声明了其成员函数和成员变量。例如 class MyClass { public:int memberVar;void memberFunction() {// 函数实现} };在上述代码中memberVar 和 memberFunction 被明确地定义为 MyClass 的成员。 2. 作用域解析 C 使用作用域解析机制来确定成员的归属。当在类外部访问成员时必须使用作用域解析运算符 :: 来指定成员所属的类。例如 void MyClass::memberFunction() {// 函数实现 }这里MyClass::memberFunction 明确指出了 memberFunction 是 MyClass 的成员函数。 3. 命名空间与作用域 C 中的命名空间namespace进一步帮助组织和管理类及其成员的命名避免命名冲突。成员的查找遵循从局部作用域到全局作用域的规则确保成员被正确地解析到所属的类。 二、编译器的符号表与名称查找 1. 符号表Symbol Table 编译器在编译过程中会维护一个符号表用于记录类、成员函数、成员变量及其属性的信息。当编译器遇到对成员的引用时会在符号表中查找相应的条目确认其所属的类及其类型。 2. 名称查找与重载解析 C 支持函数重载和运算符重载这意味着同一个类中可以有多个同名但参数不同的成员函数。编译器通过重载解析来确定调用的是哪个具体的成员函数。这一过程涉及 名称查找确定成员函数或变量的候选列表。参数匹配根据传递的参数类型和数量选择最匹配的重载版本。 例如 class MyClass { public:void func(int);void func(double); };int main() {MyClass obj;obj.func(10); // 调用 void func(int)obj.func(10.5); // 调用 void func(double) }编译器通过参数类型来解析调用的是哪个 func。 三、虚函数与多态性 1. 虚函数表vtable与虚函数表指针vptr 当类中包含虚函数时编译器会为该类生成一个虚函数表vtable这是一个指针数组存储指向虚函数的地址。每个对象包含一个隐藏的指针vptr指向其所属类的 vtable。 class Base { public:virtual void show() { std::cout Base show std::endl; }virtual ~Base() {} };class Derived : public Base { public:void show() override { std::cout Derived show std::endl; } };在上述例子中 Base 类有一个虚函数 show编译器为其生成一个 vtable包含 Base::show 的地址。Derived 类重写了 show其 vtable 包含 Derived::show 的地址。 2. 动态绑定 通过 vptr当使用基类指针或引用调用虚函数时程序会根据 vptr 指向的 vtable 动态地决定调用哪个版本的函数实现多态性。 int main() {Base* b new Derived();b-show(); // 调用 Derived::showdelete b;return 0; }在这个例子中尽管 b 是 Base 类型的指针但由于它指向一个 Derived 对象b-show() 会调用 Derived::show。 3. 内存布局 具有虚函数的类的对象内存布局通常如下 --------------------- | vptr | // 指向虚函数表的指针 --------------------- | 成员变量1 | --------------------- | 成员变量2 | ---------------------vptr 通常位于对象的开头部分是编译器自动管理的隐藏成员。 四、静态成员与全局数据段 1. 静态成员变量 静态成员变量属于类而不是类的实例。所有类的对象共享同一个静态成员变量。静态成员变量存储在数据段Data Segment中而不是在每个对象的内存中。 class MyClass { public:static int staticVar; };int MyClass::staticVar 0;在这个例子中staticVar 存储在数据段所有 MyClass 的对象共享这个变量。 2. 静态成员函数 静态成员函数也属于类而不是类的实例。它们不依赖于对象的状态可以在没有对象的情况下调用。 class MyClass { public:static void staticFunc() {std::cout Static Function std::endl;} };int main() {MyClass::staticFunc(); // 无需对象实例return 0; }五、编译器的名称修饰Name Mangling 为了支持函数重载和其他 C 特性编译器会对函数名进行名称修饰Name Mangling生成唯一的符号名。这确保了链接器能够正确地识别和绑定成员函数。 例如 class MyClass { public:void func(int);void func(double); };编译器可能将 func(int) 和 func(double) 分别编译为不同的符号如 _ZN7MyClass4funcEi 和 _ZN7MyClass4funcEd。 这种名称修饰机制确保了不同类型参数的成员函数可以共存并被正确地调用。 六、示例分析 让我们通过一个完整的示例来综合理解上述概念 #include iostreamclass Base { public:int baseVar;Base() : baseVar(0) {}virtual void show() {std::cout Base show: baseVar std::endl;}virtual ~Base() {} };class Derived : public Base { public:int derivedVar;Derived() : derivedVar(100) {}void show() override {std::cout Derived show: derivedVar std::endl;} };int main() {Derived d;Base* bPtr d;bPtr-show(); // 调用 Derived::show通过 vptr 动态绑定// 访问成员变量bPtr-baseVar 10;// bPtr-derivedVar 20; // 错误Base 类指针无法访问 Derived 类的成员std::cout Base var: bPtr-baseVar std::endl;// std::cout Derived var: bPtr-derivedVar std::endl; // 错误return 0; }分析 类定义与成员归属 Base 类有成员变量 baseVar 和虚函数 show。Derived 类继承自 Base并有自己的成员变量 derivedVar重写了虚函数 show。 对象的内存布局 对象 d 的内存布局包括 vptr 指向 Derived 类的 vtable。baseVar 来自 Base 类。derivedVar 来自 Derived 类。 动态绑定 通过 Base* bPtr d;bPtr 指向 Derived 对象。调用 bPtr-show(); 时实际调用的是 Derived::show这是通过 vptr 指向的 Derived 的 vtable 实现的。 成员访问 bPtr 是 Base 类型的指针只能访问 Base 类的成员如 baseVar。试图通过 bPtr 访问 Derived 类的成员变量 derivedVar 会导致编译错误因为 Base 类中不存在该成员。 七、总结 C 通过以下机制和特性来确定成员函数和成员变量的归属关系 类定义与作用域成员函数和成员变量在类定义中被明确声明作用域解析确保了它们的归属。编译器符号表与名称查找编译器使用符号表和名称查找规则来解析和绑定成员。虚函数表与虚函数表指针支持多态性确保通过基类指针调用派生类的重写函数。静态成员的存储管理静态成员变量和静态成员函数与类本身关联存储在数据段中。名称修饰支持函数重载和链接确保不同成员的唯一性。 通过这些机制C 能够有效地管理和区分类的成员支持复杂的面向对象编程特性同时确保类型安全和高效的内存管理。
http://www.hkea.cn/news/14552352/

相关文章:

  • 网站建设费用会计入什么费用判断网站
  • 如何免费建设网站com万网会员
  • 网站建设vps营销运营推广服务
  • 网站建设公司案例网站推广方法渠道
  • 钟楼区建设局网站全球营销策划公司排名
  • 做网站其实不贵跨境电商的现状及前景
  • 个人做外包网站多少钱广州响应式网站咨询
  • 网站整站截图动易网站建设实训报告
  • 唐山网站制作中文一级a做爰片免费网站
  • 东莞做网站软件网站推广企业
  • 泗水网站建设百度游戏风云榜
  • 网站导航优化php和python
  • 网站上线流程图竞价推广的企业
  • 如何制作互联网网站社区cms
  • 律师做推广宣传的网站广州网站app制作公司
  • 小型企业网站设计建设公司起名大全
  • 领诺科技网站建设nodejs建设直播网站
  • 温州网站建设钱wordpress 删除页眉
  • 上海网站制作优化公司php做直播类型的网站
  • 网站 前端网站怎样建立数据库连接
  • 合肥网站优化价格电脑网站加速器
  • 我想做一个网站怎么办百度个人网站申请
  • 淘宝引流到微信推广方法枫林seo工具
  • 建网站公司下载快手网站模板代码
  • 有什么做调查的网站好镇江网站搜索排名
  • 制作表白网站教程en wordpress
  • 国外网站设计欣赏分析怎么寻找国外客户资源
  • 博罗建设银行网站wordpress调用几个分类置顶文章
  • 新手如何学做网站可信网站认证代理
  • 晓风彩票网站建设软件网站 权限