首页后端开发ASP.NET技术解答面向对象的初步认识(C++ 类)

技术解答面向对象的初步认识(C++ 类)

时间2024-01-30 22:24:03发布访客分类ASP.NET浏览805
导读:收集整理的这篇文章主要介绍了技术解答面向对象的初步认识(C++ 类),觉得挺不错的,现在分享给大家,也给大家做个参考。我们应该知道C++有两种成员数据: static,nostatic; 三种成员函数: static,nostatic,vi...
收集整理的这篇文章主要介绍了技术解答面向对象的初步认识(C++ 类),觉得挺不错的,现在分享给大家,也给大家做个参考。

我们应该知道C++有两种成员数据: static,nostatic; 三种成员函数: static,nostatic,virtual。其实对于普通的成员函数中, 参数中都有一个this指针。这个this指针其实指向的是对象自己,通过this指针。C++编译器会知道是哪个对象调用的类的成员函数。

C++类对象中的成员变量和成员函数是一起存储的吗?如果不是?

我们应该知道C++有两种成员数据: static,nostatic; 三种成员函数: static,nostatic,virtual。
下面看这个案例:

class A{
        int a;
        int b;
}
    ;
class B{
        int a;
        int b;
        static int c;
}
    ;
class C{
        int a;
        int b;
        static int c;
public:    void func() {
}
    static void pg() {
}
}
    ;
int main(){
        //1. 分析A对象占的内存    A a;
        cout  sizeof(a)  endl;
      //结果是8    //2. 分析B对象占的内存    B b;
        cout  sizeof(b)  endl;
      //结果是8    //3. 分析C对象占的内存    C c;
        cout  sizeof(c)  endl;
      //结果是8    return 0;
}
    

其实根据输出结果,我们得出以下的结论:
a. 成员变量:

  • 普通的成员变量存储在对象中,与strutc变量具有相同的内存布局和字节对齐方式;

  • 静态的成员变量存储于全局数据区中

b. 成员函数存储在代码段中。


C++编译器如何管理类和对象,具体的说就是对象调用类中的方法,C++编译器是如何区分哪个具体的对象调用哪个成员方法的?


其实对于普通的成员函数(不是静态的成员函数)中, 参数中都有一个this指针。这个this指针其实指向的是对象自己,通过this指针。C++编译器会知道是哪个对象调用的类的成员函数。


我们总结一下:
a. C++类对象中的成员变量和成员函数时分开存储的;
b. C++类的普通成员函数(包括构造函数,但是不包括静态的成员函数)中都包含一个指向当前对象的this指针;
c. 静态成员函数和静态成员变量属于类;
d. 静态成员函数和普通成员函数的区别:
静态成员函数不包含指向具体对象的this指针,普通的成员函数包含一个指向具体对象的指针。

文章概述

我们需要解决这几个问题:
a. C++类对象中的成员变量和成员函数是一起存储的吗?如果不是?
b. C++编译器如何管理类和对象,具体的说就是对象调用类中的方法,C++编译器是如何区分哪个具体的对象调用哪个成员方法的?


C++类对象中的成员变量和成员函数是一起存储的吗?如果不是?

我们应该知道C++有两种成员数据: static,nostatic; 三种成员函数: static,nostatic,virtual。
下面看这个案例:

class A{
        int a;
        int b;
}
    ;
class B{
        int a;
        int b;
        static int c;
}
    ;
class C{
        int a;
        int b;
        static int c;
public:    void func() {
}
    static void pg() {
}
}
    ;
int main(){
        //1. 分析A对象占的内存    A a;
        cout  sizeof(a)  endl;
      //结果是8    //2. 分析B对象占的内存    B b;
        cout  sizeof(b)  endl;
      //结果是8    //3. 分析C对象占的内存    C c;
        cout  sizeof(c)  endl;
      //结果是8    return 0;
}
    

其实根据输出结果,我们得出以下的结论:
a. 成员变量:

  • 普通的成员变量存储在对象中,与strutc变量具有相同的内存布局和字节对齐方式;

  • 静态的成员变量存储于全局数据区中

b. 成员函数存储在代码段中。


C++编译器如何管理类和对象,具体的说就是对象调用类中的方法,C++编译器是如何区分哪个具体的对象调用哪个成员方法的?


其实对于普通的成员函数(不是静态的成员函数)中, 参数中都有一个this指针。这个this指针其实指向的是对象自己,通过this指针。C++编译器会知道是哪个对象调用的类的成员函数。


我们总结一下:
a. C++类对象中的成员变量和成员函数是分开存储的;
b. C++类的普通成员函数(包括构造函数,但是不包括静态的成员函数)中都包含一个指向当前对象的this指针;
c. 静态成员函数和静态成员变量属于类;
d. 静态成员函数和普通成员函数的区别:
静态成员函数不包含指向具体对象的this指针,普通的成员函数包含一个指向具体对象的指针。

相关推荐:

PHP面向对象 抽象类

PHP面向对象编程详解:类和对象_PHP教程

以上就是技术解答面向对象的初步认识(C++ 类)的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

上一篇: 一招搞定C++调用Lua代码配置文件...下一篇:ASP.NET全栈开发之在MVC中使用服...猜你在找的ASP.NET相关文章 C# 一些面试试题的实例教程2022-05-16.NET 6开发TodoList应用之请求日志组件HttpLogging介绍2022-04-16.NET 6中间件Http Logging使用介绍2022-04-16gojs一些实用的高级用法2022-04-16.NET6开发TodoList应用之实现查询排序2022-04-16.NET6开发TodoList应用之实现数据塑形2022-04-16.NET微服务架构CI/CD自动打包镜像2022-04-16Asp.Net Core 使用Monaco Editor 实现代码编辑器功能2022-04-16.NET微服务架构CI/CD自动构建Jenkins+Gitee2022-04-16.Net Core微服务网关Ocelot集成Consul2022-04-16 其他相关热搜词更多phpjavapython程序员loadpost-format-gallery

若转载请注明出处: 技术解答面向对象的初步认识(C++ 类)
本文地址: https://pptw.com/jishu/593116.html
一招搞定C++调用Lua代码配置文件函数(附代码) javascript array怎么删除最后一个元素

游客 回复需填写必要信息