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