c++类和对象基本概念

c++类和对象基本概念

1.什么是类?什么是对象?两者的区别是什么?

类是抽象的,对象是具体的的,对象是类的一个实例,对象继承类的方法和属性。

举个例子:人是一个类,它是抽象,那什么是对象呢?那就是具体指的哪个人,比如小红、小明,这就是对象,人有外貌特征和行为,比如鼻子、耳朵、眼睛

2.代码分析

#include<iostream>
#include<string>

using namespace std; //使用std命名空间

struct Hero
{
    char name[64];
    int id;
};

void printHero(Hero &h)
{
    cout << "name=" << h.name << endl;
    cout << "id=" << h.id << endl;
}

class SuperHero
{
    public://访问权限控制
        char name[64];
        int id;

        void printHero()
        {
            cout << "name=" << name << endl;
            cout << "id=" << id << endl;
        }//类内部函数(方法)调用 类内部变量时,不需要传参,可以直接调用
         //因为都是在同一个类的内部,函数内调用的变量会直接在类内部匹配,且不会发生歧义,类内部函数又被叫做方法
};

class Dog
{
    public: //public权限时,在类的内部和外部都可以直接访问类里面的变量和方法(函数)
        char name[64];
        char color[64];

    void printDog(int age)    //函数内的age为外部调用函数时传进来的参数
    {
        this->age = age;   //表示这个类内部定义的age, this->age 和 int age是两个不同的变量            
        cout << "age=" << this->age << endl;
        cout << "name=" << name << endl;
        cout << "color=" << color << endl;
    }

    private: //private权限时,只有类内部可以访问此权限下的变量和方法
        int age;
       
    protected: //protected权限时,在单个类中,和private关键字的权限是一样的。只有在类的继承                        中,才和private有区别
};

class Date
{
    public:
        void initDate(int year, int month, int day)
        {
            this->year = year;
            this->month = month;
            this->day = day;
        }
        
        void printDate()
        {
            cout << "year=" << year << endl;
            cout << "month=" << month << endl;
            cout << "day=" << day << endl;
        }

        bool isLeapYear()
        {
            if((year % 4 == 0 && year % 100)||(year % 400 == 0))
            {
                cout << year << "is leap year" << endl;
                return true;    
            }
            cout << year << "is not leap year" << endl;
            return false;
        }
//为了获取和改变类的私有变量,C++统一了命名方法,get...()和set...()
//将数据成员私有化,提供Getter和Setter来访问,即所谓的"封装" 
        int GetYear()
        {
            return year;
        }
        int SetYear(int year)
        {
            this->year = year;
        }

        private:
            int year;
            int month;
            int day;
};

//一个类的成员变量默认访问权限为private,类的本质是一个类型,对象的本质是变量
class Date1
{
    int year;
};

//一个结构体的成员变量的默认访问权限为public
struct Date2
{
    int year;
};

int main()
{
    Hero h = {"zhouhao",25};
    printHero(h);

    //SuperHero是一种类型,被叫做类,hero是一个SuperHero的变量,被叫做对象
    SuperHero hero;
    hero.id = 100;
    strcpy_s(hero.name, sizeof("zhouhaohao")+1,"zhouhaohao");
    hero.printHero();

    Dog dog;
    //因为Dog类里的成员变量color和name都是public权限,所以在类外部可以做直接对这两个类的内部成员赋值
    strcpy_s(dog.color, strlen("yellow")+1, "yellow");
    strcpy_s(dod.name, strlen("dahuang")+1, "dahuang");
    //在类的外部不可以直接访问类内部private权限下的变量和方法(函数),但可以通过调用public权限下的方法对私有变量进行访问修改
    dog.printDog(3);

    Date date;
    int year, month, day;
    cin >> year >> month >> day;
    date.initDate(year,month,day);
    date.printDate();
    date.isLeapYear();

    //封装的方法改变year的值
    date.SetYear(2018);
    cout << date.GetYear() << endl;
return 0; 
    
}

3.参考

猜你喜欢

转载自blog.csdn.net/a932432866/article/details/82388016