C++类的定义,成员函数的定义,对象的创建与使用
类是一个模板,可用类生成一系列可用的实例。例如 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);
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;
}
C++类的定义,成员函数的定义,对象的创建与使用的更多相关文章
- 类1(this指针/const成员函数/类作用域/外部成员函数/返回this对象的函数)
假设我们要设计一个包含以下操作的 Sales_data 类: 1.一个 isbn 成员函数,用于返回对象的 book_no 成员变量 2.一个 combine 成员函数,用于将一个 Sales_dat ...
- 对类中的成员函数的定义和声明最后添加一个const是什么意思?
1.const修饰的成员函数只能调用const修饰的成员函数,且不能修改数据成员变量的值. 2.const修饰的类对象只能调用const修饰的成员函数. 3.const修饰的类对象可以调用非const ...
- C++类的成员函数(在类外定义成员函数、inline成员函数)
类的成员函数(简称类函数)是函数的一种,它的用法和作用和前面介绍过的函数基本上是一样的,它也有返回值和函数类型,它与一般函数的区别只是:它是属于一个类的成员,出现在类体中.它可以被指定为private ...
- MFC 添加C++类,别的类不通过C++类的定义的对象就可以直接调用C++类里面的成员函数;
MFC 添加C++类,不用定义C++类的对象,别的类不通过C++类的定义的对象就可以直接调用C++类里面的成员函数: 1先在mfc程序中添加普通类CProdata,然后删除头文件Prodata.h里面 ...
- 成员函数内定义static变量(不安全,各对象之间共享)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/u012317833/article/de ...
- CDocument类的UpdateAllViews()成员函数
(一)UpdateAllViews() 与 Invalidate()的区别 UpdateAllViews()是在DOC/VIEW结构中,当一个视图的数据改变后,通知所有视图作相应的改变,和重画毫无关系 ...
- C++类的const成员函数、默认的构造函数、复制形参调用函数(转)
C++类的const成员函数 double Sales_item::avg_price() const { } const关键字表明这是一个const成员函数,它不可以修改Sales_item类的成员 ...
- 友元(友元函数、友元类和友元成员函数) C++
有些情况下,允许特定的非成员函数访问一个类的私有成员,同时仍阻止一般的访问,这是很方便做到的.例如被重载的操作符,如输入或输出操作符,经常需要访问类的私有数据成员. 友元(frend)机制允许一个类将 ...
- C++模板编程中只特化模板类的一个成员函数
模板编程中如果要特化或偏特化(局部特化)一个类模板,需要特化该类模板的所有成员函数.类模板中大多数成员函数的功能可能是一模一样的,特化时我们可能只需要重新实现1.2个成员函数即可.在这种情况下,如果全 ...
- C++友元(友元函数、友元类和友元成员函数)
友元(友元函数.友元类和友元成员函数) C++ 有些情况下,允许特定的非成员函数访问一个类的私有成员,同时仍阻止一般的访问,这是很方便做到的.例如被重载的操作符,如输入或输出操作符,经常需要访问类的私 ...
随机推荐
- MySQL报错汇总[10/29更新]
- LINUX系统新增及自动挂载硬盘-九五小庞
Linux系统下,添加新硬盘后,自动挂载的方法 1,列出所有硬盘,找到需要挂载的硬盘,例如/dev/vdb.输入: fdisk -l 2,查看硬盘是不是已经被挂载.一个硬盘不能重复挂载,已经挂 ...
- Linux环境下安装、配置Redis
linux下安装redis 官网下载链接:https://redis.io/download 安装 下载redis压缩包 1.选择Stable(5.0)下的Download 5.0.0 链接进行下载 ...
- elasitcsearch单机版安装
1.下载压缩包 https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.2.tar.gz 2.解压修改配置文件 c ...
- 2021 数字四川创新大赛WriteUp
数字四川初赛+复赛wp Web easyphp http://111.9.220.114:50006/.index.php.swp 备份文件泄漏 <?php #error_reporting(0 ...
- yum install hadoop related client
yum list avaliable hadoop\* yum list installed yum repolist repo is in /etc/yum.repos.d yum install ...
- ofd文件电子签章实现方法
前言 文档处理一般经过三个环节:流.版.签:流式软件负责编辑,如:office.wps等.版式软件负责文档定型,保证显示样式不跑偏:版式文件格式有两种:pdf.ofd.签章软件负责对版式文档签章.签章 ...
- 『学了就忘』Linux软件包管理 — 48、给源码包打补丁
目录 1.补丁的生成 2.补丁的打入 在以前的软件源码包,需要打补丁的时候比较多.现在的源码包很少进行打补丁了,因为根据需求安装不同的版本即可,比较商业化了.(也就是知道如何给源码包打补丁就可以了,了 ...
- Linux驱动实践:你知道【字符设备驱动程序】的两种写法吗?
作 者:道哥,10+年嵌入式开发老兵,专注于:C/C++.嵌入式.Linux. 关注下方公众号,回复[书籍],获取 Linux.嵌入式领域经典书籍:回复[PDF],获取所有原创文章( PDF 格式). ...
- 力扣 - 剑指 Offer 52. 两个链表的第一个公共节点
题目 剑指 Offer 52. 两个链表的第一个公共节点 思路1(栈) 若两个链表相遇,则从它开始相遇的地方到链表末尾应该都是相同的,那么我们可以将两个链表分别放入两个栈中,然后依次循环比较两个栈顶的 ...