天天看点

C++基础#1:类的定义-如何优雅的定义一个类

1. 写在前面:

从本节开始,学习C++编程的基本语法。C++语言,虽然兼容C语言语法,但是,它的优势最主要还是在面向对象的特性这部分

所以,我们之间从面向对象的编程知识开始。

本教程的编辑编译环境是:Dev-C++ 4.9.9.2 。

2. 实践内容:

类的定义: 定义一个类A,无实际意义,仅仅为了展示语法特性。

3. 思考:

定义一个类,有什么注意事项?

如何优雅的定义一个类?

4. 代码与代码说明:

(1)代码:

/*  test source:                       */
 
#include "stdio.h"
class A
{
private:
  //int i = 0; //error: ISO C++ forbids initialization of member `i'
    int j;     //OK
  //A a;       //error:  field `a' has incomplete type
    A *pa;     //OK,思考:这种定义有什么用?在什么情况下会使用这种形式 ?
               // 答:有两个功能:一, 代替this; 二, 实现链式存储结构.

               //建议:如果仅仅为了代替this,那么,没有必要,直接用this更好,否则,还得维护这个指针变量,正如本例一样;

               // 要用链式存储结构,那么,请采用链表(list)数据结构.

              //总结:虽然可以正确使用,但不建议这样用.
public:

  A()
  {
      pa=this;
  }
  ~A()
  {
       if(pa!=NULL)
       {
            delete pa; pa=NULL;
       }
  }
  int getJ()
  {
       return j;
  }
  void setJ(int j)
  {
       pa->j=j;
  }
};

int main()
{
    A a1;
    a1.setJ(5);
    printf("j = %d /n", a1.getJ()); // result: j = 5
   
    while(1);
}
           

(2)代码说明:

错误1: ISO C++ forbids initialization of member `i'

解释:在 cpp文件中,数据成员定义的同时,不可以进行初始化,对于int型的值,默认为0。

最佳实践:如果要对数据成员进行初始化,请在构造函数中进行;或者,在头文件.h/.hpp文件中进行。

错误2:field `a' has incomplete type:

解释:不能在类中再声明一个该类的数据成员;但是可以声明该类的指针变量pa。因为在编译时,A类型还没有编译完成,计算机无法识别A类型(所以提示incomplete type错误),无法为a变量申请内存空间。但是,A *pa中,pa是指针类型,是一个地址,计算机可以为其分配内存空间。

最佳实践:A *pa虽然可以正确使用,但不建议这样用。因为pa的功能可以用this代替。

5. 要点总结:

类是一种用户自定义的数据类型。

(1)在类内不允许对所定义的数据成员进行初始化。

(2)类中的数据成员的类型可以是任意的,包括整型、浮点型、字符型、数组、指针和引用等。

 也可以是对象。即另一个类的对象,可以作为该类的成员。但是,自身类的对象是不可以的(A a是非法的),而自身类的引用是可以的(A *pa是合法的)。

(3)在类的说明部分之后必须加分号“;”。

6. 原文引用:

(1)Those types are not "abstract";

         they are as real asintandfloat.  

         这些类型并不"抽象";

        它们像int和float一样实际。  [ chapter 10 Classes: P234]

(2)Ideally, such types should not differ from built-in types in the way they are used, only in the way they are created.

         最理想的情况是,在使用方式上应该无法区分出这种类型与内部类型,

         使它们的差异仅仅在创建的方式上。 [ 10.2 Classes: P235 ]

                 ------- << The C++ Programming Language >> Third Edition, Bjarne Stroustrup

继续阅读