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

C++中类的创建和声明

目录

前言

一、类的概念

二、对象


前言

        说实话,C++和C语言有比较大的差别,在C语言中我们面向的是过程,即要怎么实现功能的过程,在C++中,我们面向对象,将这些功能和函数封装起来,用到直接调用对象,那这个过程也是基于C语言的,但是大致不同的是在C语言中我们需要自己写各种功能,在C++中我们可以用其他人写好的,封装好的函数来实现相应的功能,所以涉及到的函数也相对较多。了解了这样一个大致过程,其实我们可以开始学习c++时,要注重C++中的各种语法知识和操作细节,相比C语言有不同,但是也有相似的之处,本文主要用来进行类的声明和创建,类的概率在C++中非常重要,这也是C++与C语言最大的区别。因为在C语言中没有类这个概念,也没有对象这种说法,所以重点掌握类和对象,也就理解了C++

一、类的概念

        定义:类是指一类事物的统称,将一些事物的特征(属性)和行为(方法),进行归总,得到一类事物的描述

        个人理解:像人就是一个类,但是我们也有不同的人,每个人都有自己的特征,身高体重,年龄,名字,这些特征在类中叫做属性,人能够吃饭睡觉,还有看电视,这种做某件事的能力,在类中叫行为

二、对象

        定义:我们将类的实例化,叫做对象类是一个模板,定义了数据(属性)和操作数据的方法(方法)。对象是基于这个模板创建的实际实体。

看下面的例子:

1_pig.h

#ifndef __1_PIG_H__
#define __1_PIG_H__class pig
{//定义属性int id;int age;const char sex;public:char * name;//定义行为//pig::pig(int i,int a,char s,char *n);//错误用法,在类声明的函数中,构造函数和成员函数不需要用 pig:: 修饰,只需要在函数定义(实现)时使用。pig(int i,int a,char s,char * n);pig(char s);~pig();int getid();void setid(int i);};#endif

1_pig.cpp

#include "1_pig.h"#include <iostream>
#include <cstring>
#include <cstdlib>using namespace std;//构造函数
pig::pig(int i,int a,char s,char *n):sex(s)
{name=new char[20];memset(name,0,20);strcpy(name,n);id=i;age=a;cout<<"pig(int i,int a,char s,char *n)"<<endl;
}
pig::pig(char s):sex(s)
{cout<< "pig(char s)"<<endl;
}
pig::~pig()
{cout<<"~pig()"<<endl;delete [] name; 
}
int pig::getid()
{return id;
}
void pig::setid(int i)
{id=i;
}

main.cpp

#include "1_pig.h"
#include <iostream>
using namespace std;
int main(int argc,char *argv[])
{pig p1(1,3,'m',"xiaozhu");cout<<"pig_ID="<<p1.getid()<<endl;return 0;
}

看主函数当中,我们在pig这个类中创建了p1这个对象,并且将p1这个对象中的属性初始化

,那么是怎么进行初始化的呢,这就说到了C++中的一个特性,在基于类的模板创建对象时,编译器会自动生成一个构造函数,然后再对象生命周期结束的时候,会自动生成一个析构函数,当然这是在我们没有定义构造函数和析构函数的前提下才会自动生成,上面的代码当中我自己定义了两个构造函数,因为构造函数支持函数重载,并且构造函数和类名一致。


http://www.mrgr.cn/news/29598.html

相关文章:

  • Vmware虚拟机无法打开内核设备“\\.\Global\vmx86“的解决方法
  • Gitlab升级14.0.12-->14.3.6遇到的gitlab-ctl reconfigure错误
  • MySQL聚合统计和内置函数
  • JS基础:数组for循环年龄案例
  • 「已解决」KeyError: ‘getpwuid(): uid not found: 1004‘
  • WildFly概述
  • MYSQL常用基本操作总结
  • Selenium
  • iOS六大设计原则设计模式
  • 【高级数据结构】树状数组
  • 基于Redis实现幂等判断
  • MongoDB
  • 论文阅读--Planning-oriented Autonomous Driving(一)
  • 达梦数据库导入xml迁移到达梦数据库大文件导致中断问题解决方案记录?
  • 多目标优化算法(Multi-Objective Optimization Algorithms, MOOA)介绍
  • CTFShow-反序列化
  • C++面试题
  • GIT基本使用
  • 我写了一套无敌的参数校验组件③ | SpEL Validator 之自定义约束注解
  • 传输层协议——udp/tcp