c++类的创建与使用
前言:
之前一直对c++的类的创建与使用不太熟悉,有些概念还是有点模糊,借着这次休息的机会整理一下对应是知识点。如有不正确的地方还希望各位读者批评指正。
一.C++中public、protect、private的访问权限控制
继承修饰符,就像是一种筛子,将基类的成员筛到派生类。public、protected、private,就是筛子的眼。
通过public继承,所有基类成员(除了private),public、protected都到了派生类里面,public筛眼比较大,不会改变访问权限。
通过protected继承,所有基类成员(除了private),public、protected都到了派生类里面,protected筛眼大小适中,所有过来的成员都变成了protected。
通过private继承,所有基类成员(除了private),public、protected都到了派生类里面,private筛眼最小,所有过来的成员都变成了private。
二.实例
类是一个模板,可用类生成一系列可用的实例。例如 int B就是生成了一个符合int的数据B,类也是一样,使用类名就可以直接生成一个实例,
该实例中包含类中所有的数据类型和对这些数据的操作方法。
首先,创建一个类
class OBJ { private: char Name[MAX]; int Num; float Price; float Total_price; protected: public: }
该类中包含三个部分,私有部分(private)、保护部分(protected)、公有部分(public)(当然也可以都没有成为一个空类),其中private和protected部分中的数据和内容不可以在类外通过对象(实例)直接调用。
#include<iostream> using namespace std; #define MAX 10 class OBJ //创建类 { private: char Name[MAX]; int Num; float Price; float Total_price; protected: public: }; void main() { OBJ ob;//使用类实例化ob ob.Num = 10; }
如上使用ob的private成员编译无法通过,报错test.cpp(17): error C2248: “OBJ::Num”: 无法访问 private 成员(在“OBJ”类中声明)。一般使用public方法来操作private数据,以保证数据的安全性,这同样体现了C++的封装性。
#include<iostream> using namespace std; #define MAX 10 class OBJ { private: char Name[MAX]; int Num; float Price; float Total_price; protected: public: void Get_obj(char name[], int num, float price) { strcpy(Name, name); Num = num; Price = price; Total_price = Price*Num; } char *Get_name() { return Name; } int Get_num() { return Num; } float Get_price() { return Price; } float Get_total_price() { return Price * Num; } };
一个类结束后记得加上分号,血泪教训,怎么都找不到错误原因)成员函数可以在类内部实现(如上所示),也可以在类外部实现,若在外部实现其内部只需将函数声明后加上分号.
其外部实现使用如下格式
返回值类型 类名 ::函数名(参数)
class OBJ { private: char Name[MAX]; int Num; float Price; float Total_price; protected: public: void Get_obj(char name[], int num, float price); }; void OBJ::Get_obj(char name[], int num, float price) { strcpy(Name, name); Num = num; Price = price; Total_price = Price*Num; }
::叫做作用域解析符,当类的方法在类外部实现时,用来限定该方法是哪一个类的, 当一个类中有数据和方法但是没说明其属于哪部分(protected、private、protected),则默认其为私有部分.
#include<iostream> using namespace std; #define MAX 10 class OBJ { private: char Name[MAX]; int Num; float Price; float Total_price; protected: public: void Get_obj(char name[], int num, float price) { strcpy(Name, name); // strcpy Num = num; Price = price; Total_price = Price*Num; } char *Get_name() { return Name; } int Get_num() { return Num; } float Get_price() { return Price; } float Get_total_price() { return Price * Num; } }; void main() { OBJ ob; ob.Get_obj("LLL",10,10); cout<<ob.Get_name()<<endl; cout<<ob.Get_num()<<endl; cout<<ob.Get_price()<<endl; cout<<ob.Get_total_price()<<endl; }
参考链接:https://blog.csdn.net/sw3300255/article/details/84813233