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;
}

原文地址:https://www.cnblogs.com/area-h-p/p/10311962.html

时间: 2024-11-05 05:49:25

C++类的定义,成员函数的定义,对象的创建与使用的相关文章

类的封装性和信息隐蔽—类声明和成员函数定义的分离

在面向对象的程序开发中,一般做法是将类的声明(其中包含成员函数的声明)放在指定的头文件中,用户如果想用该类,只要把有关的头文件包含进来即可,不必在程序中重复书写类的声明,以减少工作量,节省篇幅,提高编程的效率. 由于在头文件中包含了类的声明,因此在程序中就可以用该类来定义对象.由于在类体中包含了对成员函数的声明,在程序中就可以调用这些对象的公用成员函数.为了实现上一节所叙述的信息隐蔽,对类成员函数的定义一般不放在头文件中,而另外放在一个文件中. 例如,可以分别写两个文件: //student.h

用宏定义成员函数,VC6的类视图显示错误

用宏定义成员函数,VC6的类视图显示错误,实际函数可以使用. VC7没此问题. #define ConstGetMemFunMac2(varName,funName,retType)\ retType funName()const{return varName;}; class A { public: ConstGetMemFunMac2(m_x,GetX,int); int m_x; };

6——在类的外部定义成员函数

在类定义的外部定义成员函数时,应使用作用域操作符(::)来标识函数所属的类. 即有如下形式: 返回类型 类名::成员函数名(参数列表) { 函数体 } 其中,返回类型.成员函数名和参数列表必须与类定义时的函数原型一致. //Computer.h class Computer //类定义,起到接口作用 { private: char brand[20]; float price; public: //3个public成员函数的原型声明 void print(); void SetBrand(cha

模板类成员函数的定义和声明为什么要放在一个文件中

"通常情况下,你会在.h文件中声明函数和类,而将它们的定义放置在一个单独的.cpp文件中.但是在使用模板时,这种习惯性做法将变得不再有用,因为当实例化一个模板时,编译器必须看到模板确切的定义,而不仅仅是它的声明.因此,最好的办法就是将模板的声明和定义都放置在同一个.h文件中.这就是为什么所有的STL头文件都包含模板定义的原因."[1] "标准要求编译器在实例化模板时必须在上下文中可以查看到其定义实体:而反过来,在看到实例化模板之前,编译器对模板的定义体是不处理的--原因很简单

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

类的成员函数(简称类函数)是函数的一种,它的用法和作用和前面介绍过的函数基本上是一样的,它也有返回值和函数类型,它与一般函数的区别只是:它是属于一个类的成员,出现在类体中.它可以被指定为private(私有的).public (公用的)或protected(受保护的). 在使用类函数时,要注意调用它的权限(它能否被调用)以及它的作用域(函数能使用什么范围中的数据和函数).例如私有的成员函数只能被本类中的其它成员函数所调用,而不能被类外调用.成员函数可以访问本类中任何成员(包括私有的和公用的),可

C++ 中模板类的模板成员函数在类外定义

因为很多书都没讲到这种情况, 曾经有这个问题但一直没答案,所以我一直以为模板类的模板成员函数只能在类内定义,直到我在某个开源代码里看到原来要加两个 template<>  ............ (T_T) template<typename T1> class MyObjectT { public: template<typename T2> void Foo(T2 v); }; template<typename T1> template<typ

C++基础知识(六)--类--成员函数的定义--对象的创建与使用--从面向过程到面向对象

一.类 1.类是一种数据类型,将数据与对数据的操作(函数)放到一起.一个类中的数据通常只能通过本类提供的方法进行处理,这些方法成为该类与外部的接口,对象之间通过消息进行通讯. 2.如果在类的起始点无访问说明符,系统默认为私有(private) 3.类是一种数据类型,定义时系统不为类分配存储空间,所以不能对类的数据成员进行初始化.类中的任何数据成员也不能使用关键字extern,auto,register等关键字限定其存储类型 二.成员函数的定义 1.函数定义:通常在类定义中,成员函数仅做声明,函数

关于声明、定义、前向声明、include、循环依赖、普通友元函数、友元类、友元成员函数的总结

做<C++ Primer>(第5版)253页练习题7.3.4有感,故总结之 1 声明 1.1 变量和函数的声明 常见的声明是声明一个变量或函数,一般在头文件.h中声明,例如: pos cursor = 0; // 给定初始值 char get(pos r, pos col) const; 1.2 类的声明 对于一个类,一般是直接在头文件中直接写 class ClassName { ... },这称之为类的定义,然后在类体{...}中又声明或定义了成员变量和成员函数.类的声明是没有类体,只有个类

在成员函数内定义static变量

成员函数内的局部变量可以是static的.如果将成员函数内的某个局部变量定义为静态变量,该类的所有对象在调用这个成员函数时将共享这个变量. 例3-40   本例在成员函数m中定义了一个static变量s,由于s定义在程序块内,它拥有程序块范围,因此它只能在m内部访问.每调用m一次,s就会相应地增加一次.又因为m是C的成员函数,所以,C的所有对象都共享这个静态局部变量.这样,对m的每一次调用访问的都是同一个s.相反,对于非静态局部变量x来说,每个C对象都拥有一个x.所以,在main中第一次调用c1

(继承及其访问限定符)&&(派生类及其默认成员函数)&&(赋值兼容规则)

◆继承: ★继承概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能.这样产生新的类,称派生类.继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程. 继承定义格式 ★继承关系&访问限定符 class Base { public: Base() { cout<<"B()" <<endl; } ~Base () { cout<<"~