结构体和类的比较:
1、C语言:
#include <iostream> using namespace std; struct Student { public: char Name[20]; int age; private: char id[5]; char sex[3]; }; void main() { Student st1; st1.age = 10; }
通过上面的代码可以看出,在main函数里给age变量赋值可以编译通过,从中我们可以得出结论:
1、C语言结构体可以使用public private protected关键字修饰限定结构体成员的访问权限,并且结构体不写访问权限修饰符时,默认是public
2、Student st1 表示定义一个结构体变量st1
2、C++:
class Goods { public: char Name[20]; int Amount; float Price; float TOtal_value; }; void main() { Goods gd1; gd1.Amount = 10; gd1.Price = 20; }
1、类定义可以使用public private protected关键字修饰限定类成员的访问权限,并且类不写访问权限修饰符时,默认是private
2、Goods gd1 表示定义一个类变量gd1,但是C++比C语言高级,我们把类变量起一个高级的名字,叫:对象,即用类定义一个对象
3、定义类的标准模板
Test.h文件如下:
#pragma once #include <iostream> using namespace std; class Goods { public: void RegisterGoods(const char[], int, float); void CountTotal(void); void GetName(char[]); int GetAmount(void); float GetPrice(void); float GetTotal_value(void); private: char Name[21]; int Amount; float Price; float Total_value; };
Test.c文件如下:
#include "Test.h" void Goods::RegisterGoods(const char name[], int amount, float price) { strcpy(Name, name); Amount = amount; Price = price; } void Goods::CountTotal(void) { Total_value = Amount* Price; } void Goods::GetName(char name[]) { strcpy(name, Name); } int Goods::GetAmount(void) { return Amount; } float Goods::GetPrice(void) { return Price; } float Goods::GetTotal_value(void) { return Total_value; }
Main.c文件定义如下:
#include "Test.h" void main() { Goods gd1; char name[21]; int a=1; gd1.RegisterGoods("c++", 30,10.0); gd1.GetName(name); cout << name << endl; gd1.CountTotal(); a = gd1.GetAmount(); cout << a << endl; }
类是模板,只是告诉编译器有这么个数据类型,编译器并不会为类分配存储空间
当用类定义类变量时,即对象,编译器就会为对象分配内存空间