c++类的创建与使用
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 = ;
}
如上使用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",,);
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
c++类的创建与使用的更多相关文章
- C# 根据类名称创建类示例
//获得类所在的程序集名称(此处我选择当前程序集) string bllName = System.IO.Path.GetFileNameWithoutExtension(System.Reflect ...
- php简单实用的操作文件工具类(创建、移动、复制、删除)
php简单实用好用的文件及文件夹复制函数和工具类(创建.移动.复制.删除) function recurse_copy($src,$dst) { // 原目录,复制到的目录 $dir = opend ...
- 李洪强iOS开发之OC[013] -类的创建的练习
// // main.m // 12 - 类的创建练习 // // Created by vic fan on 16/7/9. // Copyright © 2016年 李洪强. All ri ...
- C++:类的创建
类的创建 #include<iostream> #include<cmath> using namespace std; class Complex //声明一个名为Compl ...
- 2--OC -- 类的创建与实例化
2.OC -- 类的创建与实例化 一.OC类的简述 1.OC类分为2个文件:.h文件用于类的声明,.m文件用于实现.h的函数: 2.类是声明使用关键字:@interface.@end : 3.类是 ...
- JAVA类的创建: 创建JAVA的类 ,JAVA的字段,JAVA类的方法
1. 创建Java的类 如果说Java的一切都是对象,那么类型就是决定了某一类对象的外观与行为.可是类型的关键字不是type,而是class,创建一个新的类型要用下面的代码: 1 2 3 class ...
- python 通过元类控制类的创建
一.python中如何创建类? 1. 直接定义类 class A: a = 'a' 2. 通过type对象创建 在python中一切都是对象 在上面这张图中,A是我们平常在python中写的类,它可以 ...
- Day 5-7 exec 和元类的创建.
exec方法 元类 exec(str_command,globals,locals)参数1:字符串形式的命令参数2:全局作用域(字典形式). 如果不指定,默认globals参数3:局部作用(字典形式) ...
- Egret 类的创建和继承--TypeScript
class test extends egret.DisplayObjectContainer { /** * 类的创建 */ //属性 name: string; age: number; ts: ...
- 快速创建SpringBoot2.x应用之工具类自动创建web应用、SpringBoot2.x的依赖默认Maven版本
快速创建SpringBoot2.x应用之工具类自动创建web应用简介:使用构建工具自动生成项目基本架构 1.工具自动创建:http://start.spring.io/ 2.访问地址:http://l ...
随机推荐
- 正确的上网姿势:ubuntu18.04使用clash
本文为本人将CFW(Clash For Windows)上的配置文件应用到ubuntu上面的操作备忘,仅供个人使用 首先下载已经打包的clash压缩包:https://github.com/Dream ...
- 顾家办公两不误,容智ibot帮你实现高效居家办公
春节假期结束,大部分企业已陆续开始复工.经调查显示,受新型冠状病毒疫情影响,不少企业开放了员工“在家办公“模式,就此,员工被动“SOHO”,在家办公火了. 2020 在家办公靠谱吗?会不会成为未来的趋 ...
- java 责任链模式的三种实现
责任链模式 责任链模式的定义:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系, 将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理他为止.这里就不再过多的介绍什么 ...
- Python:时间日历基本处理
time 模块 提供了处理时间和表示之间转换的功能 获取当前时间戳 时间戳:从0时区的1970年1月1日0时0分0秒,到所给定日期时间的时间,浮点秒数,或者毫秒整数 获取方式: import time ...
- 【渗透测试】NSA Windows 0day漏洞+修复方案
这个漏洞是前段时间爆出来的,几乎影响了全球70%的电脑,不少高校.政府和企业都还在用Windows服务器,这次时间的影响力堪称网络大地震. ------------------------------ ...
- Java 中序列化与反序列化引发的思考?
java 中序列化指从对象转变为 二进制流的过程中需要进行序列化,而反序列化指二进制流转换为java 对象.那么有的时候java 存储到数据库不需要序列化, 而计算机系统本质存储的就是二进制文件,数据 ...
- 学习笔记(20)- Google LaserTagger
参考文章:推断速度达seq2seq模型的100倍,谷歌开源文本生成新方法LaserTagger 论文地址:https://research.google/pubs/pub48542/ 开源地址:htt ...
- POJ 3258 River Hopscotch(二分答案)
嗯... 题目链接:http://poj.org/problem?id=3258 一道很典型的二分答案的题目,和跳石头太像了!! 这道题的题目很显然,求最小中的最大值,注意这道题石头的位置不是从小到大 ...
- transform 的旋转 ,3d效果,要添加3d效果的父级加上景深perspective。 3d效果的容器加上 transform-style:preserve-3d。
该技术用于创建一个多维的数据,在这个实例中使用了两个元素用于正面和反面.前面用来放置产品图片,底部用来放置产品信息.默认情况下产品信息隐藏起来,同时鼠标悬停在产品图片上时,隐藏在底部的产品信息在X轴放 ...
- i.MX RT600之DSP调试环境搭建篇
恩智浦的i.MX RT600是跨界处理器产品,同样也是i.MX RTxxx系列的开山之作.不同于i.MX RT1xxx系列单片机,i.MX RT600 采用了双核架构,将新一代Cortex-M33内核 ...