类(class)-结构体(struct)-共用体(union)的异同

一、"类" 的介绍

在C++中, 用 "" 来描述 "对象", 所谓的"对象"是指现实世界中的一切事物。那么类就可以看做是对相似事物的抽象, 找到这些不同事物间的共同点, 如自行车和摩托车, 首先他们都属于"对象", 并且具有一定得相同点, 和一些不同点, 相同点如他们都有质量、都有两个轮子, 都是属于交通工具等。"都有质量"、"两个轮子"属于这个对象的属性, 而"都能够当做交通工具"属于该对象具有的行为, 也称方法。

类是属于用户自定义的数据类型, 并且该类型的数据具有一定的行为能力, 也就是类中说描述的方法。通常来说, 一个类的定义包含两部分的内容, 一是该类的属性, 另一部分是它所拥有的方法。以 "人类" 这个类来说, 每个人都有自己的姓名、年龄、出生日期、体重等, 为 人类 的属性部分, 此外, 人能够吃饭、睡觉、行走、说话等属于人类所具有的行为。

上面举例中所描述的 "人" 类仅仅是具有人这种对象的最基础的一些属性和行为, 可以称之为人的"基类"。 再说说一些具有一些职业的人, 例如学生, 一个学生还具有"基类"中所没有的属性, 如学校、班级、学号; 也可以具有基类所不具有的行为, 如每天需要去上课, 需要考试等。

学生类可以看做是基类的一个扩展, 因为他具有基类的所有属性和行为, 并且在此基础上增加了一些基类所没有的属性和行为, 像"学生"这样的类称为"人类"这个基类的"派生类"或者"子类"。在学生的基础上海可以进一步的扩展出其他更高级的类, 如"研究生"类。

到此, 我们不再更深的去介绍类的其他相关知识。

二、C++类的定义

C++中使用关键字 class 来定义类, 其基本形式如下:

class 类名{public://公共的行为或属性private://公共的行为或属性};

说明:

①. 类名 需要遵循一般的命名规则;

②. publicprivate 为属性/方法限制的关键字, private 表示该部分内容是私密的, 不能被外部所访问或调用, 只能被本类内部访问; 而 public 表示公开的属性和方法, 外界可以直接访问或者调用。

一般来说类的属性成员都应设置为private, public只留给那些被外界用来调用的函数接口, 但这并非是强制规定, 可以根据需要进行调整;

③. 结束部分的分号不能省略

三、C++类的运用

对于类其实可以理解是一种映射,就是在把你在main函数中的定量映射到类里边的变量

#include <iostream>
#include <string>
using namespace std;

class Account {
public :
    string full_name; //类定义
    string number;
    long balance;
};

int main()
{
    Account lily; //类对象的定义
    lily.full_name = "李莉"; 
    lily.number = " 12345";
    lily.balance = 200; //钱数 200 元
    cout << lily.full_name << "的账户是:" << lily.number << "余额是:" << lily.balance << endl;

    return 0;
}

其实这样去定义一个类是可以表明类的使用,但是存在问题?

  • 未初始化:没有在成员间初始化,只是去赋值,如果忘记赋值呢?

  • 对数据无法保护: 知道账户就知道余额显然很不友善

我们引入函数去定义这样

#include <iostream>
#include <string>
using namespace std;

class Account {
private: //如果我没有private呢? 后边只是有一个
    string full_name; //类定义
    string number;
    long crnt_balance;
    /*
    string full_name; //类定义
    string number;
    long crnt_balance;     //和上边是等效的
    */
public:
    Account(string name, string num, long amnt) {
        full_name = name; //按照刚才映射的说法,将传入的数值赋值给  full_name
        number = num;
        crnt_balance = amnt;
    }
    string name()
    {
        return full_name;
    }
    string no(){
        return number;
    }
    long balance() {
        return crnt_balance;
    }
    void quqian(long amnt) {
        crnt_balance -= amnt;
    }
    void cunqian(long amnt) { //
        crnt_balance += amnt;
    }
};

int main()
{
    Account lily("李莉","23452342",10000); //将数据传入 11 行内
    lily.quqian(200);//调用的是26行的函数
    cout << lily.name() << "的账户" << lily.no() << "余额是:"<<lily.balance() << endl;
     //类中函数的调用
    return 0;
}

其实上边的你也发现了,有点麻烦,因为你在类中会定义太多的东西,private public 传入参数, 还有函数的定义........那么怎样才可以分开呢? 就是类的实现,示意图:

那么在vs2019中类的------建立如下右键点击--添加 和类向导都行---添加类--完成

这个时候你写的代码将会分为多个部分来进行

main函数

#include <iostream>
#include "Member.h"
using namespace std; //这是主函数
void print(Member* p) {
    p->print();
}
int main()
{
    Member wangming("王明", 15, 4);
    wangming.set_rank(wangming.get_rank() + 1);
    print(&wangming);
}

头文件(含有类的)

#pragma once
#include<string> //类文件
class Member
{
    std::string full_name;
    int no;
    int rank;
public:
    Member(std::string name, int number, int grade);
    int  get_rank() { return rank; }
    void set_rank(int grade) { rank = grade; }
    void print();
};

函数定义部分

#include <iostream>
#include "Member.h"
using namespace std; //函数的定义及其使用
Member::Member(string name, int number, int grade) {
    full_name = name;
    no = number;
    rank = grade;

}
void Member::print()
{
    cout << "No." << no << ":" << full_name << "{等级:" << rank << "}";
}

对于结构体的内容请点击:

structc结构体的使用

文章引用:

https://blog.csdn.net/xulingxin/article/details/81335030?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167374224216800186586453%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=167374224216800186586453&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-81335030-null-null.142^v71^control,201^v4^add_ask&utm_term=c%2B%2B%E7%B1%BB&spm=1018.2226.3001.4187

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

i-阿松!

请给我一毛钱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值