类和对象的入门

struct和class都是类的名称,区别是struct默认是public,class默认是private。权限一共是三种,publlic,private和protected。在c语言中struct只是结构体,不能存放函数,在c++中升级为类之后可以存放函数。看张图

 注意:访问限定符只在编译时有用,当数据映射到内存后,没有任何访问限定符上的区别

c++中有三大特性,封装,继承和多态,而类和对象重点研究的就是封装

封装:将数据和操作数据的方式进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。封装本质上是一种管理,让用户更方便使用类。看下类的实际应用

#include<iostream>
using namespace std;
struct gym{
public:
    int add(int a, int b) {
        return a + b;
    }
    int getx(int m) {
        x = m;
        return x;
    }
private:
    int x;
};

int main()
{
    gym res;
    cout << res.add(1, 2) << endl;//输出3
    cout <<res.getx(5)<< endl;//输出5
    return 0;
}

注意,一般只能类中的函数才能使用private中的东西。在一般代码中有三个域,优先级从小到大是局部域,类域,全局域。因此下面这段代码中并没有用到private中的x,只使用到了局部域,也就是使用函数传参的x

struct gym{
public:
    int getx(int x) {
        x = x;
        return x;
    }
private:
    int x;
};

注意类里面定义的函数默认是内联函数inline,函数太复杂就不会被认为是内联,这部分上次的博客有讲。

同时,类也可以将声明和定义分离,看个例子,这种方法在实际使用中也会经常用到

//头文件add1.h
struct kkk{
public:
	int add(int a, int b);
private:
    int t=6;
};
//源代码
#include<iostream>
#include"add1.h"
using namespace std;

int kkk::add(int a, int b) {
    return (a + b) * 5+t;
}
int main()
{
    kkk bb;
    cout << bb.add(1, 2) << endl;//输出(1+2)*5+6=21
    return 0;
}

看下什么是类的实例化,只有实例化对象才会占用空间

 在验证一下在刚实例化一个类的时候,中间的所有东西都会创建并占有空间吗?

#include<iostream>
using namespace std;
struct gym{
public:
    int add(int a, int b) {
        return a + b + x;
    }
 
    int getx(int m) {
        x = m;
        return x;
    }
private:
    double y = 5;
    int x=1;
};
int main()
{
    gym res;
    cout << sizeof(gym) << endl;//输出16
    cout << sizeof(res) << endl;//输出16,说明设计图和设计图产生出来的房子大小是一样的
    return 0;
}

结果证明对象中只存储成员变量,不存储成员函数,函数在不使用时并不占用空间!这里只计算了存储一个 int型和一个double型变量。至于为什么是16,请自行搜索如何计算一个结构体大小的知识,这里不再讲述。但是如果一个类没有成员变量,只有成员函数呢?会占1字节来证明它存在。

看下面这个情况,其实s1和s2调用的是一个地址的函数!

#include<iostream>
using namespace std;
struct gym{
public:
    int add(int a, int b) {
        return a + b + x;
    }
 
    int getx(int m) {
        x = m;
        return x;
    }
private:
    double y = 5;
    int x=1;
};
int main()
{
    gym s1;
    gym s2;
    cout<<s1.add(3,4)<<endl;
    cout<<s2.add(3,4)<<endl;
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值