类和对象介绍

一、类
1.类的声明

class Box{//类名private://私有成员double width,length,height;//长,宽,高 public://公有成员void init(double l,double w,double h){//初始化 length=l;width=w;height=h;}double S(){//求表面积 return (height*length+height*width+length*width)*2;}double V(){//求体积 return height*width*length;} 
};

2.对象的实例与使用

#include<iostream>
using namespace std;
class Box{private:double width,length,height;//长,宽,高 public:void init(double l,double w,double h){//初始化 length=l;width=w;height=h;}double S(){//求表面积 return (height*length+height*width+length*width)*2;}double V(){//求体积 return height*width*length;} 
};
int main()
{Box b1;//对象的实例b1.init(12,13,14);// 通过实例对象调用方法cout<<"表面积:"<<b1.S()<<endl;cout<<"体积:"<<b1.V()<<endl;} 

3.构造函数的定义
类名::类名 (参数列表) [:数据成员初始化列表]
{函数体}
当类中有多个构造函数时,系统会根据对象实例的状态调用构造方法。
当类中没有定义构造函数时,系统会调用默认创建的空参构造函数-类名(){}
构造函数在对象实例时自动调用。

#include<iostream>
using namespace std;
class Box{private:double length,width,height;public:Box();//无参数的构造函数 Box(double,double,double);//有参数的构造函数void show();
};
Box::Box()
:length(1),width(1),height(1){}//给数据成员赋值 
Box::Box(double l,double w,double h)
:length(l),width(w),height(h)//相当于length=l;width=w;height=h; 
{ }
void Box::show(){cout<<length<<'\t'<<width<<'\t'<<height<<endl;
}
int main()
{Box b1;//对象b1未给任何参数,系统自动调用Box()构造方法为其赋值 Box b2(1,2,3);//对象b2有参数,系统自动调用Box(double,double,double)构造方法为其赋值b1.show();b2.show();}
#include<iostream>
using namespace std;
class A{private:int b,c;public:void show();
};
void A::show(){cout<<b<<'\t'<<c<<endl;
}
int main(){A a1;//未定义构造函数,系统默认建立并调用A(){}的构造函数进行初始化 a1.show();
} 

4.拷贝函数
是构造函数特殊形式,实现对象之间数据的传递

 cout<<"Date类的拷贝函数被调用" <<endl; 
}
void Date::show(){cout<<"year:"<<year<<'\t'<<"month:"<<month<<'\t'<<"day"<<day<<endl;
}
int main()
{Date d1(1998,5,13);Date d2(d1);//调用拷贝函数,将对象传入,实现对象数据传递 d1.show();d2.show();} 

5.析构函数
功能与构造函数相反,释放构造函数分配的内存空间。
无返回值,不能接收参数,只能有一个。
系统会自动调用,无定义时默认创建并调用~类名() {}

#include<iostream>
using namespace std;
class C{private:double r;public:C(double a=1):r(a){cout<<"调用构造函数为r赋值为"<<r<<endl; }~C();//声明一个析构函数 
};
C::~C(){//定义析构函数 cout<<"调用析构函数,其r值为"<<r<<endl;
}
int main(){C c1,c2(10);//c1先创建后释放,c2后创建先释放 
} 

二、对象
1.对象数组
由多个对象实例组成的数组

#include<iostream>
#define PI 3.1415926
using namespace std;
class Circle{private:double r;public:Circle(double r1):r(r1){cout<<"已赋值!"<<endl;}double Perim();double area();double getR(){return r;};
};
double Circle::Perim(){return 2*PI*r;
}
double Circle::area(){return PI*r*r;
}
int main()
{Circle c[3]={Circle(1),Circle(2),Circle(3)};//初始化:每个元素对象调用构造函数的过程 cout<<"半径\t周长\t面积"<<endl;for(int i=0;i<3;i++)cout<<c[i].getR()<<'\t'<<c[i].Perim()<<'\t'<<c[i].area()<<endl;}

2.指向对象的指针

#include<iostream>
using namespace std;
class A{private:int value;public:A(int v):value(v){cout<<"对象赋值完成!"<<endl;}void show(){cout<<"值为:"<<value<<endl;}void change(int v){value=v;} 
};
int main()
{A a1(2);cout<<"改变前value为"<<endl;a1.show();A *a2=&a1;//实例一个指向a1的指针对象 a2->change(3);//指针对象调用a1中的函数改变其值 cout<<"改变后value为"<<endl;a1.show();}

3.this指针
指向本类的实例对象

#include<iostream>
using namespace std;
class A{private:int a;public:A(int a1=0):a(a1){}void show(){cout<<"this为"<<this<<'\n'<<"属性a为"<<a<<endl;}
};
int main()
{A a1(1);a1.show();cout<<"&a1为"<<&a1<<endl;//this指向a1对象 A a2(2);a2.show();cout<<"&a2为"<<&a2<<endl;//this指向a2对象
}

应用

#include<iostream>
using namespace std;
class Rectangle{private:double length,width;public:Rectangle(double l,double w):length(l),width(w){}void show(){cout<<length<<'\t'<<width<<'\t'<<(length+width)<<'\t'<<length*width<<endl;}void change(double length,double width){//当形参名与属性名同名时,通过this区分,this调用类中属性名 this->length=length;//this是一个指针变量,要通过->调用 this->width=width;}
};
int main()
{Rectangle r(10,10);cout<<"长\t宽\t周长\t面积"<<endl;r.show();r.change(5,5);cout<<"改变值后"<<endl;cout<<"长\t宽\t周长\t面积"<<endl;r.show();} 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/114166.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Lua语法】字符串

Lua语言中的字符串是不可变值。不能像在C语言中那样直接改变某个字符串中的某个字符&#xff0c;但是可以通过创建一个新字符串的方式来达到修改的目的 print(add2(1 , 2 ,15,3))a "no one"b string.gsub(a , "no" , "on1111")print(a) print…

【Python】AttributeError: module lib has no attribute X509_V_FLAG_CB_ISSUER_CHECK

问题&#xff1a; 运行脚本报错&#xff1a;module lib has no attribute X509_V_FLAG_CB_ISSUER_CHECK 原因&#xff1a; pyOpenSSL版本与python版本不匹配 解决方案&#xff1a; window系统 重新安装pyOpenSSL 1、卸载当前版本pyOpenSSL pip uninstall pyOpenSSL2、重新…

flink问题 集合

1.flink 乱码 在配置文件flink-conf.yaml增加配置项&#xff1a;env.java.opts: -Dfile.encodingUTF-8

神经网络的不同类型的层

神经网络可以包含多个不同类型的层&#xff0c;每种层都具有不同的特点和应用场景。以下是常见的神经网络层的分类及其详细特点和应用场景&#xff1a; 1. 输入层&#xff08;Input Layer&#xff09;&#xff1a; 特点&#xff1a;输入层通常不包含任何权重或激活函数&#…

第87步 时间序列建模实战:LSTM回归建模

基于WIN10的64位系统演示 一、写在前面 这一期&#xff0c;我们介绍大名鼎鼎的LSTM回归。 同样&#xff0c;这里使用这个数据&#xff1a; 《PLoS One》2015年一篇题目为《Comparison of Two Hybrid Models for Forecasting the Incidence of Hemorrhagic Fever with Renal…

Compose Desktop 使用中的几个问题(分平台加载资源、编写Gradle 任务下载平台资源、桌面特有组件、鼠标键盘事件)

前言 在我之前的文章 Compose For Desktop 实践&#xff1a;使用 Compose-jb 做一个时间水印助手 中&#xff0c;我们使用 Compose For Desktop 写了一个用于读取照片 EXIF 中的拍摄日期参数并以文字水印的方式添加到照片上的桌面程序。 但是事实上&#xff0c;这个程序的名字…

从入门到进阶 之 ElasticSearch SpringData 继承篇

&#x1f339; 以上分享 从入门到进阶 之 ElasticSearch SpringData 继承篇&#xff0c;如有问题请指教写。&#x1f339;&#x1f339; 如你对技术也感兴趣&#xff0c;欢迎交流。&#x1f339;&#x1f339;&#x1f339; 如有需要&#xff0c;请&#x1f44d;点赞&#x1f…

PHP数据加密传输和存储问题

PHP数据加密的类型 md5()&#xff0c;sha1()&#xff0c;crypt() 双md5加密加盐

AAPCS:最新的ARM子程序调用规则

AAPCS是arm公司发布的ARM架构应用程序二进制&#xff08;ABI&#xff09;程序调用接口&#xff0c;该文档由多个版本&#xff0c;博主第一次ARM程序调用规则是在《ARM体系与结构编程》&#xff0c;但书中描述的是ATPCS&#xff0c;AAPCS是ATPCS的升级版。后面去ARM官网看到了AA…

自然语言处理基础——词表示

词表示 把自然语言中最基本的语言单元——词转换为机器能够理解的 词表示能完成以下两个能力 词相似度计算 词与词之间语义的关系 近义词&上位词 使用近义词或上位词表示的问题 遗漏差异 遗漏新的释义 带有主观性 数据吸收 需要大量人工构建 One-Hot Representation …

Kafka学习(最新版3.6.0)

文章目录 一、初识MQ1.1 什么是MQ1.2 同步和异步通讯1.1.1 同步通讯1.1.2 异步通讯 1.3 技术对比1.4 MQ的两种模式 二、初识Kafka2.1 Kafka的使用场景2.2 Kafka基本概念2.3 Topic与Partition 三、Kafka基本使用3.1 部署前的准备3.2 启动kafka服务器3.3 Kafka核心概念之Topic3.4…

【每日一题Day354】LC2316统计无向图中无法互相到达点对数 | 并查集

统计无向图中无法互相到达点对数【LC2316】 给你一个整数 n &#xff0c;表示一张 无向图 中有 n 个节点&#xff0c;编号为 0 到 n - 1 。同时给你一个二维整数数组 edges &#xff0c;其中 edges[i] [ai, bi] 表示节点 ai 和 bi 之间有一条 无向 边。 请你返回 无法互相到达…

059:mapboxGL监听键盘事件,通过eastTo控制左右旋转

第059个 点击查看专栏目录 本示例是介绍演示如何在vue+mapbox中监听键盘事件,通过eastTo控制左右旋转。 本例通过easeTo方法来加减一定数值的bearing角度,通过.addEventListener的方法来监听键盘的按键动作。这里一定要设置interactive: false, 否则展现不出来旋转效果。 直…

机械设备经营小程序商城的作用是什么

由于机械设备厂商品牌需要各地招商代理&#xff0c;因此在管理方面也需要工具进行高效管理。如今各个行业都在开展数字化转型解决行业所遇难题或通过线上销售解决传统三公里难题及品牌扩张难题、用户消费渠道少等难题&#xff0c;构建会员体系精细化管理&#xff0c;同时还需要…

MySQL 主从复制原理

文章目录 1.主从复制方式1.1 异步复制1.2 半同步复制1.3 全同步复制 2.主从复制原理3.主从复制时推还是拉&#xff1f;参考文献 主从复制是 MySQL 高可用&#xff08;备份&#xff09;和高性能&#xff08;读写分离&#xff09;的基础&#xff0c;有了这个基础&#xff0c;MySQ…

qt 开发api文档地址

直达Qt5开发api文档&#xff0c;doc.qt.io/qt-5/classes.html 打开www.qt.io后右上角的Developers点进去&#xff0c;然后Qt Documentation下面的View All C Classes 点进去就是api了。

代码随想录算法训练营Day60|单调栈01

代码随想录算法训练营Day60|单调栈01 文章目录 代码随想录算法训练营Day60|单调栈01一、739. 每日温度二、496.下一个更大元素 I 一、739. 每日温度 class Solution {public int[] dailyTemperatures(int[] temperatures) {//单调栈int lenstemperatures.length;int result[]n…

Java设计模式之状态模式

状态模式&#xff08;State Pattern&#xff09;是一种行为型设计模式&#xff0c;它允许对象在内部状态改变时改变其行为。该模式将对象的行为封装在不同的状态类中&#xff0c;使得对象在不同的状态下可以有不同的行为&#xff0c;从而实现了状态的切换和行为的变化。 在状态…

【Ascend C算子开发(入门)】——Ascend C编程模式与范式

Ascend C编程模型与范式 1.并行计算架构抽象 Ascend C编程开发的算子是运行在AI Core上的&#xff0c;所以我们需要了解一下AI Core的结构。AI Core主要包括计算单元、存储单元、搬运单元。 计算单元包括了三种计算资源&#xff1a;Scalar计算单元&#xff08;执行标量计算&…

外骨骼机器人和人形机器人概览

前言&#xff1a;一点思考 外骨骼机器人和人形机器人都曾随着一些爆品的出现火热过一段时间&#xff0c;但总感觉当前技术条件还不成熟&#xff0c;真正能落地的应用场景不多。马斯克在擎天柱发布会上被问到人形机器人的落地与前景问题时并没有给出明确答案&#xff0c;只是用…