C++ 类(Class)之详解包含构造函数 析构函数 函数成员 变量等解释

      类是c++重要核心之一,也是有别于c语言标志之一。对于初学者可能会为此头疼,看了很多博客等网上讲解,也不知所云。为此,我将在这里针对类所有变化进行解释。

      介绍类之前,我先简单提及一下结构体,大家都知道c语言没有类,但却有结构体,其编辑代码如下:
#include "stdafx.h"
#include
using namespace std;
struct A {
int c;
int d;
void function_a() {
c = 100;
d = 10 * c;
cout << c << "\t" << d << endl;
};
};
int main()
{
A a;
a.function_a();
while (1);
    return 0;
}
其实结构体本身就是类的一种特殊情形,然不同在于结构体所定义的变量(如上:int c),实际是类中的公有变量,若要将以上代码改成简单类的形式,需将struct 改为class,改写如下:
#include "stdafx.h"
#include
using namespace std;
class A {
public:
int c;
int d;
public:
void function_a() {
c = 100;
d = 10 * c;
cout << c << "\t" << d << endl;
};
};
int main()
{
A a;
a.function_a();
while (1);
    return 0;
}
我们可以看到细微之处,公有变量c与d以“public:”形式开头,而“public:”告诉编译器所申明的变量c与d属于类A中的公有变量,与公有变量相对应的是私有变量“private:”,它们之间的区别为:
公有(public:):表示外界可以直接访问或者调用;
私有(private:):表示外界不可以直接访问或者调用,只能供该类中的函数访问或调用。
说到这里,我们已经粗略了解了简单类的代码如何书写,但有人会问,为什么需要使用类呢?介于此,我将介绍一下类的定义,为读者解答迷惑。
在C++中, 用 "" 来描述 "对象", 所谓的"对象"是指现实世界中的一切事物。那么类就可以看做是对相似事物的抽象, 找到这些不同事物间的共同点, 如tiger,他有身高height、体重weight为私有变量,每天食量数据food、行走距离walk为公有变量,则可将tiger定义为一个类,其代码如下:
class Tiger {
private:
double height;
double weight;
public:
double food;
double  walk;
};
然以上只定义了一类tiger的数据特征,并未表明其某些特征由什么行为所导致,因此,我们还需写些函数,由函数来导致数据变化,然有些固定数据不变,如tiger的身高、体重,我们则用构造函数来决定。以上代码可改写为:
class Tiger {
public:
Tiger(double t1, double t2) {
height = t1;
weight = t2;
};
~Tiger() {};                                    //析构函数
void FOOD(int t3) {
food = 10 * t3;
};
void WALK(int t3) {
walk = 10000 * t3;
};
void print() {
cout << "height=" << height << "\t" << "weight=" << weight << "\t" << "food=" << food << "\t" << "walk=" << walk << endl;
};
private:
double height;
double weight;
public:
double food;
double  walk;
};
在这里,我们将老虎看作一个类,然每个老虎的身高和体重都有不同的值,因此我们将该类的构造函数写成含参数的构造函数。说到这里,我也将在此位置简单介绍一下构造函数及与其对应的析构函数:
构造函数:构造函数一般是为了类中变量的 初始化,伴随着对象直接运行,无需像其它普通成员函数那样调用。如果你没写构造函数,则系统会默认一个为空的构造函数;如果你写了构造函数,系统会掉用你所写的构造函数。一般而言,构造函数只有一个,但也可以写多个,此时的构造函数类似于函数重载。关于函数重载内容可参考网上其它解释,我并不在这里介绍。
析构函数:析构函数是与构造函数相对应的,析构函数仅允许出现一个,且没有形参亦无返回值。其具体用法可看我博客中其它相关文章。
紧接着,我们将定义2只老虎相关数据,第一支老虎取名为first_tiger高30、重70;第二支老虎取名为second_tiger高50、重90。且每只老虎的食量与走路路程均是根据某个参数而得到,则调用该类可写如下代码:
int main()
{
Tiger first_tiger(30, 70), second_tiger(50, 90);
first_tiger.FOOD(58);
first_tiger.WALK(158);
first_tiger.print();
second_tiger.FOOD(88);
second_tiger.WALK(188);
second_tiger.print();
while (1);
    return 0;
}
其完整版如下:
#include "stdafx.h"
#include
using namespace std;
class Tiger {
public:
Tiger(double t1, double t2) {
height = t1;
weight = t2;
};
~Tiger() {};
void FOOD(int t3) {
food = 10 * t3;
};
void WALK(int t3) {
walk = 10000 * t3;
};
void print() {
cout << "height=" << height << "\t" << "weight=" << weight << "\t" << "food=" << food << "\t" << "walk=" << walk << endl;
};
private:
double height;
double weight;
public:
double food;
double  walk;
};
int main()
{
Tiger first_tiger(30, 70), second_tiger(50, 90);
first_tiger.FOOD(58);
first_tiger.WALK(158);
first_tiger.print();
second_tiger.FOOD(88);
second_tiger.WALK(188);
second_tiger.print();
while (1);
    return 0;
}
其结果为:
height=30       weight=70       food=580        walk=1.58e+06
height=50       weight=90       food=880        walk=1.88e+06
注:可直接运行
此时,我对类进行简单总结以及注意事项:
1.关键字2个,private与public。
2.构造函数与析构函数没有类型申明,构造函数必须和类相同,析构函数前必须加“~”符号。
3.构造函数可为多个,析构函数只有一个。
4.一般类名为大写。
当然类还有在类外定义函数及类继承与静态函数、静态变量等,以及友元函数等有关内容可参考我的博客或网上其它资料。
 
 
 
    
 
 
 
 
 
 
posted @ 2019-10-15 11:37  tangjunjun  阅读(1324)  评论(0编辑  收藏  举报
https://rpc.cnblogs.com/metaweblog/tangjunjun