声明只是指定了一个结构体类型,C语言中的结构

第四种方式

struct { 数据类型 member1; 数据类型 member2;}结构体变量名;

此方式是匿名结构体,在定义时同时声明2个结构体变量,但不能在其它地方声明,因为我们无法得知该结构体的标识符,所以就无法通过标识符来声明变量。

#include<stdio.h>struct { int sNo; char name[10];}stu,stu1; //匿名结构体,同时定义了2个结构体变量int main(){ scanf("%d",&stu.sNo); scanf("%s",stu.name); printf("%dn",stu.sNo); scanf("%d",&stu1.sNo); scanf("%s",stu1.name); printf("%dn",stu1.sNo);}

对于成员访问权限以及继承方式,struct中是public。而class中默认的是private,class还可以用于表示模板类型,struct则不行。

namespace std{struct living_habit{ //生活习惯结构体...};struct animal :public living_habit {//动物继承生活习惯结构体... };struct bird :public animal{ //鸟继承动物...};}

另外namespace std{} : 称namespace,在声明一个命名空间时,花括号内不仅可以包括变量,而且还可以包括以下类型:·变量;·常量;·数;·结构体;·类;·模板;

第一种语法表示

struct 结构体名称{    

数据类型 member1;    

数据类型 member2;

};

这种方式在声明结构体变量时为:struct 结构体名称 结构体变量名

example :

 1 #include<stdio.h>
 2 struct Student{
 3     int sNo;
 4     char name[10];
 5 };
 6 int main(){
 7     struct Student stu;
 8     scanf("%d",&stu.sNo);
 9     scanf("%s",stu.name);
10     printf("%dn",stu.sNo);
11 }

 

typedef struct 结构体名称{
   数据类型 member1;
   数据类型 member2;
}结构体名称别名;
这种方式在声明结构体变量时有两种方式。

面向对象的基本概念

  char class;

第三种方式

struct 结构体名称{ 数据类型 member1; 数据类型 member2;}结构体变量名;

相当于:

struct 结构体名称{ 数据类型 member1; 数据类型 member2;};struct 结构体名称 结构体变量名;

这种方式既定义了结构体名称,同时声明了一个结构体变量名。在其它地方也可以通过struct 结构体来再次声明其它变量,而第四种方法则不可以。

#include<stdio.h>struct Student{ int sNo; char name[10];}stu; //此处stu 是变量名int main(){ scanf("%d",&stu.sNo); scanf("%s",stu.name); printf("%dn",stu.sNo);}

第二种语法表示

typedef struct 结构体名称{    

数据类型 member1;    

数据类型 member2;

}结构体名称别名;

这种方式在声明结构体变量时有两种方式。

第一种:struct 结构体名称 构体变量名  

第二种:结构体名称别名 结构体变量名

原因:这里使用了typedef关键字,此关键字的作用就是声明数据类型的别名,方便用户编程,所以这里用了之后,结构体名称别名就相当于struct 结构体名称。在声明结构体变量时,就无需写struct了。 example:

 1 #include<stdio.h>
 2 typedef struct Student{
 3     int sNo;
 4     char name[10];
 5 }Stu;
 6 int main(){
 7     struct Student stu;  //方式一
 8     Stu stu1;            //方式二
 9     scanf("%d",&stu.sNo);
10     scanf("%s",stu.name);
11     printf("%dn",stu.sNo);
12     scanf("%d",&stu1.sNo);
13     scanf("%s",stu1.name);
14     printf("%dn",stu1.sNo);
15 }

 

这种方式既定义了结构体名称,同时声明了一个结构体变量名。在其它地方也可以通过struct 结构体来再次声明其它变量,而第四种方法则不可以。

4. 简述面向对象的三个基本特征。

  • 1.封装
    面向对象中的封装特性是指将客观事物抽象成类,即把数据和操作数据的函数封装成类,对数据的访问只能通过向用户暴露的接口。封装可以隐藏实现细节,使得代码模块化,这样能避免受到外界的干扰和误用,从而确保了安全。【数据封装实现了数据隐藏(针对于数据)和数据抽象(针对于操作函数)】
  • 2.继承
    继承是面向对象中的核心技术。它允许一个类(子类)从另一个已有类(父类)中继承,这样在子类中即使不写任何代码也能够继承父类中保护和公有成员(父类中的私有成员不能够被子类继承),真正实现了不通过粘贴、复制的方式实现代码重用。面向对象中的多态性、动态绑定技术都是在继承的基础上实现的。
  • 3.多态
    多态是面向对象技术的精华。在面向对象语言中,接口的多种不同的实现方式即为多态。多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。多态性在C++中都是通过虚函数实现的。

方法3:在已经声明/定义了结构体类型时,利用了类型名称定义结构体变量!

第二种语法表示

typedef struct 结构体名称{ 数据类型 member1; 数据类型 member2;}结构体名称别名;这种方式在声明结构体变量时有两种方式。

第一种:struct 结构体名称 构体变量名第二种:结构体名称别名 结构体变量名

原因:这里使用了typedef关键字,此关键字的作用就是声明数据类型的别名,方便用户编程,所以这里用了之后,结构体名称别名就相当于struct 结构体名称。在声明结构体变量时,就无需写struct了。

#include<stdio.h>typedef struct Student{ int sNo; char name[10];}Stu;int main(){ struct Student stu; //方式一 Stu stu1; //方式二 scanf("%d",&stu.sNo); scanf("%s",stu.name); printf("%dn",stu.sNo); scanf("%d",&stu1.sNo); scanf("%s",stu1.name); printf("%dn",stu1.sNo);}

第四种方式

struct {        

数据类型 member1;    

数据类型 member2;

}结构体变量名;

此方式是匿名结构体,在定义时同时声明2个结构体变量,但不能在其它地方声明,因为我们无法得知该结构体的标识符,所以就无法通过标识符来声明变量。

example:

 1 #include<stdio.h>
 2 struct {
 3     int sNo;
 4     char name[10];
 5 }stu,stu1;     //匿名结构体,同时定义了2个结构体变量
 6 int main(){
 7     scanf("%d",&stu.sNo);
 8     scanf("%s",stu.name);
 9     printf("%dn",stu.sNo);
10     scanf("%d",&stu1.sNo);
11     scanf("%s",stu1.name);
12     printf("%dn",stu1.sNo);
13 }

C++语言结构体语法

C++语言结构体语法的C大同小异,声明结构体变量时可以省略struct 其它无变化! 具体参照C语言部分,在用到“struct 结构体名称”时,可以简写为“结构体名称”来声明。

};

5. 什么是局部类?

在 C++中允许在函数体内定义一个类,这样的类被称之为局部类。对于局部类来说,它只能够在函数内部使用,函数外是无法访问局部类的,因为局部类被封装在了函数的局部作用域中。

参考资料:
详解C结构体、C++结构体 和 C++类的区别

{

:实现

两种方式:一种类内 实现,另外一种是在类内对成员函数进行声明 ,类外实现(setPoint2)

 #include <iostream> using namespace std; class Point { public: void setPoint(int x, int y) //类内 实现setPoint函数 { xPos = x; yPos = y; } void setPoint2(int x, int y); //在类内对成员函数进行声明 ,类外实现 void printPoint() //实现printPoint函数 { cout<< "x = " << xPos << endl; cout<< "y = " << yPos << endl; } private: int xPos; int yPos; }; void Point2::setPoint(int x, int y) //通过作用域操作符 '::' 实现setPoint函数 { xPos = x; yPos = y; } int main() { Point M; //用定义好的类创建一个对象 点M M.setPoint; //设置 M点 的x,y值 //M.setPoint2; //设置 M点 的x,y值 M.printPoint(); //输出 M点 的信息 return 0; } 

概念:class和struct的语法基本相同,从声明到使用,都很相似,但是struct的约束要比class多,理论上,struct能做到的class都能做到,但class能做到的stuct却不一定做的到。类型:struct是值类型,class是引用类型,因此它们具有所有值类型和引用类型之间的差异。效率:由于堆栈的执行效率要比堆的执行效率高,但是堆栈资源却很有限,不适合处理逻辑复杂的大对象,因此struct常用来处理作为基类型对待的小对象,而class来处理某个商业逻辑。关系:struct不仅能继承也能被继承 ,而且可以实现接口,不过Class可以完全扩展。内部结构有区别,struct只能添加带参的构造函数,不能使用abstract和protected等修饰符,不能初始化实例字段。

注(本文作为随笔方便自己以后查看,转载请附以下参考链接):

C语言结构体语法

相当于:

1. 简述 C 和 C++ 有何不同?

宏观上:

  • C 语言属于面向过程语言,通过函数来实现程序功能。而 C++ 是面向对
    象语言,主要通过类的形式来实现程序功能。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制),而对于C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。
  • 使用 C++ 编写的面向对象应用程序比 C 语言写的程序更容易维护、扩展性更强。C++ 多用于开发上层的应用软件。而 C 语言代码体积小,执行效率高,多用于编写系统软件和嵌入式开发。

微观上:略(参考下文)

1   struct student
2   {
3     int num;
4     float score;
5     struct student *next;
6   };
第一种语法表示

struct 结构体名称{ 数据类型 member1; 数据类型 member2;};这种方式在声明结构体变量时为:struct 结构体名称 结构体变量名

#include<stdio.h>struct Student{ int sNo; char name[10];};int main(){ struct Student stu; scanf("%d",&stu.sNo); scanf("%s",stu.name); printf("%dn",stu.sNo);}

第三种方式

struct 结构体名称{    

数据类型 member1;    

数据类型 member2;

}结构体变量名;

相当于:

struct 结构体名称{    

数据类型 member1;    

数据类型 member2;

};

struct 结构体名称 结构体变量名;

这种方式既定义了结构体名称,同时声明了一个结构体变量名。在其它地方也可以通过struct 结构体来再次声明其它变量,而第四种方法则不可以。

example:

 1 #include<stdio.h>
 2 struct Student{
 3     int sNo;
 4     char name[10];
 5 }stu;      //此处stu 是变量名
 6 int main(){
 7     scanf("%d",&stu.sNo);
 8     scanf("%s",stu.name);
 9     printf("%dn",stu.sNo);
10 }

 

数据类型 成员1;

3. C++ 中的结构体和类有何区别?

  • 对于成员访问权限以及继承方式,class 中默认的是 private,而struct中则是 public 。
  • 概念:class 和 struct 的语法基本相同,从声明到使用,都很相似,但是 struct 的约束要比 class 多,理论上,struc t能做到的 class 都能做到,但 class 能做到的 struct 却不一定做的到。
  • 类型:struct 是值类型,class 是引用类型,因此它们具有所有值类型和引用类型之间的差异。
  • 效率:由于堆栈的执行效率要比堆的执行效率高,但是堆栈资源却很有限,不适合处理逻辑复杂的大对象,因此 struct 常用来处理作为基类型对待的小对象,而 class 来处理某个商业逻辑。
  • 关系:struct 不仅能继承也能被继承 ,而且可以实现接口,不过 class 可以完全扩展。内部结构有区别,struct 只能添加带参的构造函数,不能使用 abstract 和 protected 等修饰符,不能初始化实例字段。

特别注意:
(1) 在表示诸如点、矩形等主要用来存储数据的轻量级对象时,首选 struct 。
(2) 在表示数据量大、逻辑复杂的大对象时,首选 class 。
(3) 在表现抽象和多级别的对象层次时,class 是最佳选择

 

C语言中的结构体不能为空,否则会报错

要求一个结构或联合至少有一个成员

转自:

原因:这里使用了typedef关键字,此关键字的作用就是声明数据类型的别名,方便用户编程,所以这里用了之后,结构体名称别名就相当于struct 结构体名称。在声明结构体变量时,就无需写struct了。

2. C 和 C++ 中结构体有何不同?

  • C 语言中的结构体不能为空,否则会报错,C 要求一个结构体至少有一个成员
  • C 语言中的结构体只涉及到数据结构,而不涉及到算法,也就是说在 C 中数据结构和算法是分离的。换句话说就是 C 语言中的结构体只能定义成员变量,但是不能定义成员函数。然而在 C++ 中既可以定义成员变量又可以定义成员函数, C++ 中的结构体和类体现了数据结构和算法的结合。
    不过虽然 C 语言的结构体中不能定义成员函数,但是却可以定义函数指针,不过函数指针本质上不是函数而是指针,所以总的来说 C 语言中的结构体只是一个复杂数据类型 ,只能定义成员变量,不能定义成员函数,不能用于面向对象编程。来看一个函数指针的例子:
int My_Add(int a, int b)  
{  
    return a + b;  
}  
int My_Sub(int a, int b)  
{  
    return a - b;  
}  
struct  CTest  
{  
    int(*Add)(int, int); //函数指针  
    int(*Sub)(int, int);  
};  

int main()  
{  
    struct CTest test;  
    int ret = 0;  
    test.Add = My_Add;  
    test.Sub = My_Sub;  
    ret = test.Add(3, 5);  
    printf("%d", ret);  
}

特别注意:

struct  CTest  
{  
    char ch;  
    int num;  
};  
int main()  
{  
    CTest test;  // C 中必须写成 struct CTest test;
    test.num = 1;  
    printf("%d", test.num);  
} 

这样在 C 语言中是编译不过去的,原因提示未定义标识符 CTest 。总的来说就是在 C 语言中结构体变量定义的时候,若为 struct 结构体名 变量名定义的时候,struct 不能省略。但是在 C++ 之中则可以省略 struct。

一般形式为:

C语言中的结构体只涉及到数据结构,而不涉及到算法.

也就是说在C中数据结构和算法是分离的。换句话说就是C语言中的结构体只能定义成员变量,但是不能定义成员函数。然而在C++中既可以定义成员变量又可以定义成员函数, C++中的结构体和类体现了数据结构和算法的结合。不过虽然C语言的结构体中不能定义成员函数,但是却可以定义函数指针,不过函数指针本质上不是函数而是指针,所以总的来说C语言中的结构体只是一个复杂数据类型 ,只能定义成员变量,不能定义成员函数,不能用于面向对象编程。来看一个函数指针的例子:

int FuncAdd(int a, int b) //求和{ return a + b; } struct CTest1 { int; //函数指针 }; int main() { struct CTest1 test; int AddResult = 0; test.Add = My_FuncAdd; AddResult = test.Add; printf("%d", AddResult); }

结构体简介

      结构体属于聚合数据类型的一类,它将不同的数据类型整合在一起构成一个新的类型,相当于数据库中一条记录,比如学生结构体,整合了学号,姓名等等信息。结构体的好处就是可以对这些信息进行、整体管理操作,类似面向对象中类的属性,有了结构体,我就可以更好抽象描述一个类别,个人感觉类就是由结构体发展而来的。在C/C++中,结构体声明的关键字为struct。

struct 结构体名称{

  p -> n 得到 p 指向的结构体变量中的成员 n 的值

图片 1C语言中的结构体

  1. 第三种方式

}变量名表列;

:定义(默认的是private):
class 类名 { public: //公共的行为或属性 private: //公共的行为或属性 }; 

struct 结构体名称{
   数据类型 member1;
   数据类型 member2;
};
struct 结构体名称 结构体变量名;

(2)如果成员本身又属于一个结构体类型,则要用若干个成员运算符,一级一级地找到最低一级的成员,只能对最低级的成员进行运算、赋值!

1.第一种方式

第一种  上面第二种用法前面直接加typedef

2.第二种语法表示

}student_1;

结构将不同的数据类型整合在一起构成一个新的类型,排列三平台出售(企 娥:217 1793 408)相当于数据中一条记录,比如学生结构体,整合了学好,姓名等信息。结构体的好处就是可以对这些信息进行整体管理操作,类似面向对象中类的属性,有了结构体,就可以更好抽象描述一个类别,个人感觉类就是由结构体发展而来的,在C/C++中,结构体声明的关键字为struct.

第二种  上面第三种用法前面直接加typedef

数据类型 成员2;

(2)在结构体最后,分号之前加入数组,如stu[4]  

struct 结构体名称{
   数据类型 member1;
   数据类型 member2;
}结构体变量名;

1.3如何使用结构体成员变量

typedef struct {

}student_1;

struct 结构体名

  成员表列

 

  char name[20];

这样再加上typedef,同上分析,也就是说struct student有两个别名,分别是student_1和student_2,都可以代替struct student定义变量。也就是说有三种用法,struct student aaa;student_1 aaa;student_2 aaa都是等价的。

  char name[20];

(1)不能将一个结构体变量作为一个整体进行输入和输出,只能对结构体变量在的各个成员分别进行输入输出!

  char class;

  char name[20];

本文由必威发布于必威-编程,转载请注明出处:声明只是指定了一个结构体类型,C语言中的结构

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。