类是一个模板,可用类生成一系列可用的实例。例如 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. 类1(this指针/const成员函数/类作用域/外部成员函数/返回this对象的函数)

    假设我们要设计一个包含以下操作的 Sales_data 类: 1.一个 isbn 成员函数,用于返回对象的 book_no 成员变量 2.一个 combine 成员函数,用于将一个 Sales_dat ...

  2. 对类中的成员函数的定义和声明最后添加一个const是什么意思?

    1.const修饰的成员函数只能调用const修饰的成员函数,且不能修改数据成员变量的值. 2.const修饰的类对象只能调用const修饰的成员函数. 3.const修饰的类对象可以调用非const ...

  3. C++类的成员函数(在类外定义成员函数、inline成员函数)

    类的成员函数(简称类函数)是函数的一种,它的用法和作用和前面介绍过的函数基本上是一样的,它也有返回值和函数类型,它与一般函数的区别只是:它是属于一个类的成员,出现在类体中.它可以被指定为private ...

  4. MFC 添加C++类,别的类不通过C++类的定义的对象就可以直接调用C++类里面的成员函数;

    MFC 添加C++类,不用定义C++类的对象,别的类不通过C++类的定义的对象就可以直接调用C++类里面的成员函数: 1先在mfc程序中添加普通类CProdata,然后删除头文件Prodata.h里面 ...

  5. 成员函数内定义static变量(不安全,各对象之间共享)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/u012317833/article/de ...

  6. CDocument类的UpdateAllViews()成员函数

    (一)UpdateAllViews() 与 Invalidate()的区别 UpdateAllViews()是在DOC/VIEW结构中,当一个视图的数据改变后,通知所有视图作相应的改变,和重画毫无关系 ...

  7. C++类的const成员函数、默认的构造函数、复制形参调用函数(转)

    C++类的const成员函数 double Sales_item::avg_price() const { } const关键字表明这是一个const成员函数,它不可以修改Sales_item类的成员 ...

  8. 友元(友元函数、友元类和友元成员函数) C++

    有些情况下,允许特定的非成员函数访问一个类的私有成员,同时仍阻止一般的访问,这是很方便做到的.例如被重载的操作符,如输入或输出操作符,经常需要访问类的私有数据成员. 友元(frend)机制允许一个类将 ...

  9. C++模板编程中只特化模板类的一个成员函数

    模板编程中如果要特化或偏特化(局部特化)一个类模板,需要特化该类模板的所有成员函数.类模板中大多数成员函数的功能可能是一模一样的,特化时我们可能只需要重新实现1.2个成员函数即可.在这种情况下,如果全 ...

  10. C++友元(友元函数、友元类和友元成员函数)

    友元(友元函数.友元类和友元成员函数) C++ 有些情况下,允许特定的非成员函数访问一个类的私有成员,同时仍阻止一般的访问,这是很方便做到的.例如被重载的操作符,如输入或输出操作符,经常需要访问类的私 ...

随机推荐

  1. shell 中小括号,中括号,大括号的区别

    一.小括号,圆括号() 1.单小括号 () ①命令组.括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用.括号中多个命令之间用分号隔开,最后一个命令可以没有分号, ...

  2. Laravel/Lumen 分组求和问题 where groupBy sum

    在Laravel中使用分组求和,如果直接使用Laravel各数据库操作方法,应该会得出来如下代码式: DB::table('table_a') ->where('a','=',1) ->g ...

  3. 【java+selenium3】自动化基础小结+selenium原理揭秘 (十七)

    一.自动化实现原理 1.创建驱动对象   (1) 首先加载浏览器安装目录下的exe文件 (2) 其次是加载可执行驱动的exe文件,监听等待客户端发送的web service请求. 底层原理如下: 1. ...

  4. Linux 系统分区方案 详细教程

    简单分区方案 实际上,很多时候我们只需要分两个区:/和交换分区,日常使用基本不会有任何影响,甚至于交换分区对于现在的电脑来说都不是必要的,我们完全可以只分配一个根分区.linux只需要一个/根分区就可 ...

  5. 从环境搭建到回归神经网络案例,带你掌握Keras

    摘要:Keras作为神经网络的高级包,能够快速搭建神经网络,它的兼容性非常广,兼容了TensorFlow和Theano. 本文分享自华为云社区<[Python人工智能] 十六.Keras环境搭建 ...

  6. Java线程状态及同步锁

    线程的生命历程 线程的五大状态 创建状态:简而言之,当创建线程对象的代码出现的时候,此时线程就进入了创建状态.这时候的线程只是行代码而已.只有调用线程的start()方法时,线程的状态才会改变,进入就 ...

  7. 9组-Alpha冲刺-1/6

    一.基本情况 队名:不行就摆了吧 组长博客:https://www.cnblogs.com/Microsoft-hc/p/15526668.html 小组人数: 8 二.冲刺概况汇报 谢小龙 过去两天 ...

  8. CF285D.D. Permutation Sum

    CF285D. Permutation Sum 题目 大意 寻找a,b两个排列从0到n-1,有c[i]=(a[i]+b[i])%n+1,使得c[i]也为全排列的排列方式 思路 a中元素和b中元素的对应 ...

  9. OPA-Gatekeeper实验:对特定用户的更新时间窗口做限制

    实验目的 OPA-Gatekeeper可以在Kubernetes 中,通过策略来实现一些额外的管理.安全方面的限制,例如:限制特定用户在 Namespace 中的行为权限 本次实验将在test命名空间 ...

  10. ASP.NET Core 学习笔记 第五篇 ASP.NET Core 中的选项

    前言 还记得上一篇文章中所说的配置吗?本篇文章算是上一篇的延续吧.在 .NET Core 中读取配置文件大多数会为配置选项绑定一个POCO(Plain Old CLR Object)对象,并通过依赖注 ...