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 ...
随机推荐
- C++中map的介绍用法以及Gym题目:Two Sequences
Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字(key),每个关键字只能在map中出现一次,第二个可能称为该关键字的值(value))的数据 处理能力,由于这个特性,它完成有可能 ...
- 【译】高级T-SQL进阶系列 (七)【下篇】:使用排序函数对数据进行排序
此文为翻译,由于本人水平有限,疏漏在所难免,欢迎探讨指正. 原文链接:传送门. 使用NTILE函数的示例 NTILE函数将一组记录分割为几个组.其返回的分组数是由一个整形表达式指定的.如下你会找到NT ...
- SpringCloud全家桶学习之客户端负载均衡及自定义负载均衡算法----Ribbon(三)
一.Ribbon是什么? Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端 负载均衡的工具(这里区别于nginx的负载均衡).简单来说,Ribbon是Netf ...
- input type=range 进度条的自定义样式
/* 自定义进度条样式 */ .v_my input[type=range] { -webkit-appearance: none;/*清除系统默认样式*/ width: .8rem; backgro ...
- 《掌握融资必备知识》---创业学习---训练营第一课---HHR---
一,<开始学习> 1,四个思考题: (1)从你决定开始融资,到你拿到钱,你都需要经历哪些环节? (2)你知道投资机构内部的工作流程吗? (3)融资最好的时机是什么时候? (4)创投圈的专业 ...
- Bugku-CTF加密篇之easy_crypto(0010 0100 01 110 1111011 11 11111 010 000 0 001101 1010 111 100 0 001101 01111 000 001101 00 10 1 0 010 0 000 1 01111 10 11110 101011 1111101)
easy_crypto 0010 0100 01 110 1111011 11 11111 010 000 0 001101 1010 111 100 0 001101 01111 000 00110 ...
- 找到第N个字符
找到第N个字符 小黑黑上课的时候走神儿,鬼使神差的就想到了这么一个问题,假如: S1=a S2=ab S3=abc S4=abcd S26=abcdefghijklmnopqrstuvwxy ...
- VUE项目开发中使用WebSocket
初始化WebSocket initWebSocket(){ //初始化weosocket const wsuri = 'ws://10.100.45.8:8888/websocket';//ws地址 ...
- echarts做飞线图
先上图,要不感觉没有说服力: 飞线图应该是大屏中很常见的一种了,通常你可以很轻易的用datav做一个飞线图,而且datav做的大屏逼格真的很高,本身也是开源免费的项目,开箱即用,上手简单……行了回归正 ...
- Python 基础之面向对象之异常处理
一.认识异常 1.常用异常报错的错误类型 IndexError 索引超出序列的范围 KeyError 字典中查找一个不存在的关键字 Na ...