C++中类的创建和声明

news/2024/9/18 20:49:29 标签: 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.niftyadmin.cn/n/5664498.html

相关文章

Vert.x, 简介

Vert.x是什么 Vert.x是Eclipse基金会下的一个开源项目&#xff0c;基于Eclipse Public License(EPL)2.0和Apache License 2.0双重许可&#xff0c;是一个基于JVM的用于构建响应式(reactive)应用程序的工具包。 Vert.x基于Netty&#xff0c;但不仅仅局限于开发可扩展的高性能网…

openCV的python频率域滤波

在OpenCV中实现频率域滤波通常涉及到傅里叶变换(Fourier Transform)和其逆变换(Inverse Fourier Transform)。傅里叶变换是一种将图像从空间域转换到频率域的数学工具,这使得我们可以更容易地在图像的频域内进行操作,如高通滤波、低通滤波等。 下面,我将提供一个使用Py…

RTX 4090 系列即将停产,RTX 5090 系列蓄势待发

据最新消息&#xff0c;英伟达将于今年10月正式终结其GeForce RTX 4090及RTX 4090D两款旗舰级显卡的生产线。根据行业媒体报道&#xff0c;英伟达及其合作厂商将从下个月开始全面停止这两款显卡的制造。 自2022年10月问世以来&#xff0c;GeForce RTX 4090凭借其无与伦比的GPU…

国产分布式数据库-tidb单机部署文档

tidb单机部署文档 1、创建用户 #创建用户 useradd tidb #设置密码 passwd tidb2、配置免密码登录 编辑/etc/sudoers文件,文末加入&#xff1a; tidb ALL(ALL) NOPASSWD:ALL如果想要控制某个用户(或某个组用户)只能执行root权限中的一部分命令, 或者允许某些用户使用sudo时…

微服务容错及解决

学前必备知识 学之前我们要理解一些概念&#xff0c;之后我们会遇到QPS&#xff0c;并发量&#xff0c;线程等专有名词。 一文搞懂高并发性能指标&#xff1a;QPS、TPS、RT、并发数、吞吐量 - 知乎 (zhihu.com) 雪崩问题 1 是什么 在微服务远程调用的过程中&#xff0c;还…

python队列操作

1. 队列初始化 创建空的队列&#xff1a; test_list [] 使用初始值&#xff1a; test_list [1, 2, 3, 4, 5] test_list3 ["a", "b", "c", "d"] 使用列表生成式创建一个带有初始元素的列表&#xff1a; >>> test_lis…

力扣150题——位运算

位运算概述 位运算&#xff08;Bitwise Operation&#xff09;是计算机底层操作中的一种&#xff0c;用来直接对整数的二进制位进行操作。位运算通常速度很快&#xff0c;且消耗的内存较少&#xff0c;在处理一些特定问题&#xff08;如加密算法、图像处理、低级硬件编程等&…

Threejs之看房案例(下)

本文目录 前言最终效果1、点精灵1.1 添加点精灵1.2 点精灵效果2、添加事件2.1 鼠标移动事件2.1.1 效果2.2 鼠标点击事件2.2.1 效果2.3 切换互通3. 完整代码前言 在Threejs之看房案例(上)这篇博客中我们已经完成了大厅的3d观看效果,但是我们会发现如果想去其他房间观看,没有…