首页 > 其他分享 >struct and class

struct and class

时间:2023-10-19 15:44:08浏览次数:26  
标签:调用 struct int 子类 class public

struct and class

struct

struct 和 class 都是由各种数据组成的集合(也叫做类),这些数据可以是整数,浮点数,字符,也可以是函数。在代码中,我们首先定义集合的名字,包含的数据类别。之后可以命名需用的集合,在主函数或者一些函数中对这些集合调用。

先对 struct 做一个示例:

#include<iostream>
using namespace std;
//定义一种结构体的名字,之后你可以把node理解为和int,string同样效果的东西 
struct node{
	int x,y;//定义node中我要包含的数据 
};
int main()
{
	node a;//定义一个变量a,他的数据类型就是你的node
	//然后你就可以对a里面的数据调用
	a.x=1;a.y=2;
	cout<<a.x<<endl;
	cout<<a.y<<endl; 
	return 0;
}

struct 里面也可以进行函数的定义。并可以直接调用自身所包含的数据并作出修改。(调用自身的含义,是指不需要使用 \(a.x\) 而可以直接写 \(x\))。

#include<iostream>
using namespace std;
struct node{
	int x,y;
	void add(){
		x=x+y;
	}
};
int main()
{
	node a;
	a.x=1;a.y=2;
	cout<<a.x<<endl;
	cout<<a.y<<endl; 
	a.add();
	cout<<a.x<<endl;
	return 0;
}

数据权限

class 和 struct 最大的区别,在于数据权限的默认值,数据权限分为三种:public, private, protected。

public: main 函数和子类 class 可以调用。
private: main 函数和子类 class 都不可以调用。
protected: main 函数不可以,子类 class 可以调用。

我们用代码及结果来理解权限的含义

class A{
	public:
		int x;
	protected:
		int y;
	private:
		int z;
}
int main()
{
	A a;
	cout<<a.x;//1
	cout<<a.y;//2
	cout<<a.z;//3
}

这样写只有语句1可以正常输出,语句2,3都会使你编译错误。

子类的写法:

class B: public A

这样的写法表示 B 可以调用 A 里面数据权限为 public 的所有数据。下面这段代码表示 A 是基类,B 是 A 的子类。

class A
{
	public:
		int x=1;
};

class B : public A{
};
int main()
{
	B b;
	cout<<b.x;
}

输出结果为1。

需要注意的两点是:

1.子类不可调用基类的 private。
2.子类调用基类的 protected 数据后,仍不可以在主函数输出这些数据。

这里就可以提到 struct 和 class 的区别:如果不定义数据权限,struct 里面的值默认为 public,而 class 里面的值默认为 private。这就是为什么我们不用在 struct 里面定义数据权限,他就可以在主函数里面被调用,直接做各种计算。

所以对于 class,我们一般会定义权限为 public 的函数,来对 private 的数据进行读入,计算,输出。如:

class A{
	public:
		void print(){
			cout<<x;
		}
	private:
		int x=2;
};
int main()
{
	A a;
	a.print();
}

构造函数(Constructors)

对类的数据成员进行初始化,对各个数据赋予初始值。

为什么要有这个函数?对于普通的局部变量来说,如果不赋予初值,那么他的初始值是随机的,所以初始化就非常重要,例如一个人的年龄不可能是负数,在不初始化的情况下,可能出现一些预估外的错误。

构造函数的形式为:

class A{
	public:
		A(int a){
			x=a;
		}
		void print(){
			cout<<x;
		}
	private:
		int x;
};
int main()
{
	A a(2);
	a.print();
}

一个 class 可以写多个构造函数,区分它们的方法是 \(A()\) 括号中的内容,我们去定义class变量时,如上述代码中的 \(a(2)\),系统会根据你输入的数据类型去匹配你写的构造函数,然后执行。

代码示例

class info{
	public:
		info(){
			name="unknown";
			age=0;
		}
		info(string s){
			name=s;
			age=0;
		}
		info(int a){
			name="unknown";
			age=a;
		}
		info(string s,int a){
			name=s;
			age=a;
		}
		void getname(string s){
			name=s;
		}
		void printname(){
			cout<<name<<endl;
		}
		void getage(int b){
			age=b;
		}
		void printage(){
			cout<<age<<endl;
		}
	private:
		string name;
		int age;
};
int main()
{
	info a,b("Niu"),c(18),d("Zhao",20);
	a.printname();
	a.printage();
	b.printname();
	b.printage();
	c.printname();
	c.printage();
	d.printname();
	d.printage();
	return 0;
}

输出结果

标签:调用,struct,int,子类,class,public
From: https://www.cnblogs.com/zxhmh/p/17774857.html

相关文章

  • 神经网络基础篇:详解二分类(Binary Classification)
    二分类注:当实现一个神经网络的时候,通常不直接使用for循环来遍历整个训练集(编程tips)举例逻辑回归逻辑回归是一个用于二分类(binaryclassification)的算法。首先从一个问题开始说起,这里有一个二分类问题的例子,假如有一张图片作为输入,比如这只猫,如果识别这张图片为猫,则输出标签......
  • [JOISC 2021 Day2] 道路の建設案 (Road Construction)
    [JOISC2021Day2]道路の建設案(RoadConstruction)题意给定图上\(n\)个点,求前\(k\)小曼哈顿距离点对距离。题解很好的一道题。首先有一个\(O(nlog^2n)\)的做法,个人感觉还是很有启发性的。一般对于第\(k\)小的处理方法是二分,二分第\(k\)小的距离是多少。然后统......
  • /sys/class/gpio/连续读取gpio引脚电平有问题的原因
    一、通过shell命令读取引脚电平值/sys/class/gpio/目录下的内容 可以向export写入相应引脚输出来导出gpio,例如echo66>export 进入gpio66下,读取value的值即为gpio输入的值(默认为输入)二、通过C程序读取引脚电平值 程序:intmain(intargc,char*argv[]){in......
  • 10_rust的结构体struct
    rust的struct定义和实例化struct使用struct关键字,并对整个struct命名。在花括号内,对所有字段(Field)定义名称和类型。创建struct实例:为每个字段指定具体值,无需按声明顺序进行指定。structUser{name:String,id:u64,is_act:bool,}fnmain(){letu1=......
  • Java(Spring) 通过反射classforName获取对象实例导致@Autowired注入失效
    使用策略模式多态获取具体的策略问题描述:classforName在代码中使用反射获取对象实例后,对象实例中通过@Autowrite注解注入的属性值为null(注入失败),导致带反射获取的对象实例调用方法时出现空指针等情况。问题原因:通过反射获取对象实例相当于“new”了一个对象,所以这个对象并没有被......
  • antd for vue3 table 使用rowClassName设置样式固定列不生效
    依赖库版本:Vue3+antdforvuev3.X样式问题:固定列背景色不生效,鼠标移入对应行背景色变为初始的白色columns:[{title:'装置',width:100,dataIndex:'areaName',fixed:'left'},...{title:'装置',w......
  • 16 class 绑定
    初学阶段,这玩意看得懂就行了目的:操作class属性对象绑定:单个对象::class={}多个对象::class="ObjectClass"数组绑定:class=[]对象与数组的结合使用只能数组嵌套对象,不能反着来......
  • 2——of C++ class relative
    C++类C++和java都是面向对象的语言,所以类的语法上看起来相似,但也有些区别,比如访问控制符的书写规范。除此之外,在访问控制权限,静态static等内容也有很大区别1.访问控制权限访问控制符//不加的默认私有classplayer{intx,y;intspeed;voidmove(inta,intb){......
  • elasticsearch通过Java class类的@Setting和@Mapping来定义索引index
    今天就来和大家讲讲如何将es索引中的mapping和setting在索引index和class联系起来,其实在这个问题也困扰我好久了,一直没有解决,在elasticsearch7.x版本的时候貌似好像可以用request在程序中来建立索引,像Stringindex=“{“mapping”:...}”之类的操作,干起来比较复杂,在elasticsearch......
  • 终止代码: CRITICAL STRUCTURE CORRUPTION,Win10蓝屏处理
    出现这个蓝屏代码通常情况下是系统内核文件缺失可以使用以下代码进行修复SFC/scannowDISM.exe/Online/Cleanup-image/ScanhealthDISM.exe/Online/Cleanup-image/Restorehealth......