精华内容
下载资源
问答
  • 在上篇文章《inline的另一用处》中,提到函数实现在类定义中与类定义外的区别。  现在先看个实验:  a.cpp:   #ifndef TEST_H #define TEST_H class A{ public: int fun(int x){ return (x*x+1000); ...

        在上篇文章《inline的另一用处》中,提到函数实现在类定义中与类定义外的区别。

        现在先看个实验:

        a.cpp:

       

    #ifndef TEST_H
    #define TEST_H
    class A{
    	public:
    	int fun(int x){
    	return (x*x+1000);
    }
    };
    #endif
    
    void tt()
    {
    }
    


    b.cpp:

    class A{
    	public:
    	int fun(int x);
    };
    void tt();  
    int yy()  
    {  
        tt(); 
    	A a;
    	return a.fun(3);  
    }
    	
    

    将它们分别编译后再链接:

    显示链接错误,因为b.cpp(b.o)中找不到A::fun(int)的引用。

    将以上的a.cpp改为如下所示:

    #ifndef TEST_H
    #define TEST_H
    class A{
    	public:
    	int fun(int x);
    };
    #endif
    int A::fun(int x){
    	return (x*x+1000);
    }
    void tt()
    {
    }
    


        分别编译a.cpp和b.cpp为a.o和b.o后链接,显示链接成功。

        这样,第一次链接错误的原因就很明显了。

        结论:

        在类定义中的类成员函数实现有文件内部作用域,而在类定义外部的类实现有的是全局作用域。

    展开全文
  • 在定义局部时需要注意:局部类中不能说明静态成员函数,并且所有成员函数都必须定义在类体内。实践,局部是很少使用的。下面是一个局部的例子。  int a;  void fun()  {  static
    局部类

      在一个函数体内定义的类称为局部类。局部类中只能使用它的外围作用域中的对象和函数进行联系,因为外围作用域中的变量与该局部类的对象无关。局部类不能被外部所继承。在定义局部类时需要注意:局部类中不能说明静态成员函数,并且所有成员函数都必须定义在类体内。在实践中,局部类是很少使用的。下面是一个局部类的例子。
       int  a;
      
    void  fun()
      
    {
      
    static int s;
      
    class A
      
    {
        
    public:
        
    void init(int i) { s = i; }
      }
    ;
      A m;
      m.init(
    10);
      }


    局部类的另一个用途是用来实现类型转化,如下代码:

    class  Interface
    {
    public:
       
    virtual void Fun() = 0;  
    }
    ;

    template 
    < class  T,  class  P >
    Interface
    *  MakeAdapter( const  T &  obj,  const  P &  arg)
    {
        
    int x;
       
    class Local : public Interface
       
    {
       
    public:
          Local(
    const T& obj, const P& arg)
             : obj_(obj), arg_(arg) 
    {}
          
    virtual void Fun()
          
    {
              x 
    = 100;
             obj_.Call(arg_);
          }

       
    private:
          T obj_;
          P arg_;
       }
    ;
       
    return new Local(obj, arg);
    }


       嵌套类

      在一个类中定义的类称为嵌套类,定义嵌套类的类称为外围类。

      定义嵌套类的目的在于隐藏类名,减少全局的标识符,从而限制用户能否使用该类建立对象。这样可以提高类的抽象能力,并且强调了两个类(外围类和嵌套类)之间的主从关系。下面是一个嵌套类的例子:

      class  A
      
    {
       
    public:
        
    class B
        
    {
        
    public:
          …
        
    private:
          …
        }
    ;
        
    void f();
        
    private:
        
    int a;
      }




       其中,类B是一个嵌套类,类A是外围类,类B定义在类A的类体内。

      对嵌套类的若干说明:

      1、从作用域的角度看,嵌套类被隐藏在外围类之中,该类名只能在外围类中使用。如果在外围类的作用域内使用该类名时,需要加名字限定。

      2、从访问权限的角度来看,嵌套类名与它的外围类的对象成员名具有相同的访问权限规则。不能访问嵌套类的对象中的私有成员函数,也不能对外围类的私有部分中的嵌套类建立对象。

      3、嵌套类中的成员函数可以在它的类体外定义。

      4、嵌套类中说明的成员不是外围类中对象的成员,反之亦然。嵌套类的成员函数对外围类的成员没有访问权,反之亦然。国此,在分析嵌套类与外围类的成员访问关系时,往往把嵌套类看作非嵌套类来处理。这样,上述的嵌套类可写成如下格式:

      class A
      {
      public:
        void f();
      private:
        int a;
      };

        class B
      {
        public:
        …
      private:
        …
      };

      由引可见,嵌套类仅仅是语法上的嵌入。

      5、在嵌套类中说明的友元对外围类的成员没有访问权。

      6、如果嵌套类比较复杂,可以只在外围类中对嵌套类进行说明,关于嵌套的详细的内容可在外围类体外的文件域中进行定义。
    展开全文
  • Java在类中定义接口

    万次阅读 2016-11-26 15:30:31
    一、类中定义接口 package com.dao.util; public class Util { public interface Worker { void work(); } } package com.dao.util; import com.dao.util.Util.Worker; public class Demo implements Worker...
    一、类中定义接口
    package com.dao.util;
    
    public class Util {
        public interface Worker {
            void work();
        }
    }
      
    package com.dao.util;
    
    import com.dao.util.Util.Worker;
    
    public class Demo implements Worker {
        public void work() {
            System.out.println("Is working");
        }
    }
    在这个util类里面封装了会改变的Worker,也就是说,util类里面有自己的算法:一部分是固定,另外一部分是可变的,而这个可变的部分就变成了一个接口(接口是特殊的抽象类~其实的意思大概的这个worker可能在不同的工作环境有不同的工作方式,例如work(),onvaction())

    所以在类里面放一个接口不是什么新的设计,而是一种思想方式,让代码扩展性更高

    二、java内部类使用


    解析:原来我写的内部类是动态的,也就是开头以public class开头。而主程序是public static class main。在Java中,类中的静态方法不能直接调用动态方法。只有将某个内部类修饰为静态类,然后才能够在静态类中调用该类的成员变量与成员方法。所以不做其他变动的情况下,最简单的解决办法是将public class改为public static class.

    展开全文
  • C++模板类中的成员函数以及模板函数在类定义

    千次阅读 多人点赞 2020-03-05 18:45:07
    C++类中的成员函数可以在类外完成定义,从而显得类中的成员函数看起来简洁明了。但是模板里的成员函数和模板函数与普通的成员函数在类定义不同。 先定义一个模板以及成员函数和模板函数: 接下我们就...

    在C++中,类中的成员函数可以在类外完成定义,从而显得类中的成员函数看起来简洁明了。但是模板类里的成员函数和模板函数与普通的成员函数在类外定义不同。
    先定义一个模板类以及成员函数和模板函数:
    在这里插入图片描述
    接下我们就在类外定义函数:
    1.构造函数
    在这里插入图片描述
    2.成员函数
    在这里插入图片描述
    3.模板函数
    这里是
    以上就是模板类中的成员函数以及模板函数在类外定义的三种形式。

    展开全文
  • c++中在类定义函数

    万次阅读 2017-01-09 15:31:48
    c++有时候类中的成员函数过长,那么此时在类定义成员函数就不利于程序的阅读了,此时我们大都会将是函数定义在类外。  c++规定,在类定义成员函数时要用类名和作用域运算符进行限定。  如程序:...
  • C++——定义和声明

    万次阅读 多人点赞 2018-08-23 10:49:04
    以面向对象的方式开发应用程序时,将遇到的各种事物抽象为类中通常包含数据和操作数据的方法,用户通过实例化对象来访问类中的数据和方法。 一、定义 class/struct 类名 //头 {数据和方法的定义...
  • 类中定义自身的对象

    千次阅读 2018-06-27 16:52:33
    C++的类定义中,是不能够类中定义自身类的对象的,但是可以定义自身类的指针对象和引用。class A{public: A () { cout&lt;&lt;"Constructor method."&lt;&lt;endl; }; A a;}; ...
  • pythonclass 类定义与使用

    千次阅读 多人点赞 2020-02-02 19:40:08
    pythonclass 类定义与使用 学习python类这一部分也是非常常用的,类的定义类似于函数却又不同于函数,class 定义一个类, 后面的类别首字母推荐以大写的形式定义,比如Calculator. class可以先定义自己的属性...
  • 今天写STL rb_tree 的时候意外的发现一个问题:模板类的模板成员函数不能在类定义外部进行特化,特化必须放在类定义内,否则将报错:error C2244: “X::test”: 无法将函数定义与现有的声明匹配 经过写如下的...
  • Python中定义类方法

    千次阅读 2019-07-31 22:29:40
    方法也分实例方法和方法, 与属性类似 class中定义的全部是实例...class中定义类方法,需要这么写: class Person(object): count = 0 @classmethod def how_many(cls): return cls.count def __init__(se...
  • 方法中定义内部

    千次阅读 2018-03-27 18:57:52
    方法中定义内部 理论上内部可以定义在类中的任意位置上,这就包括了:、方法、代码块。不过如果从实用角度上讲方法中定义内部的形式是最多的。范例:方法中定义内部 class Outer{//定义一个外部...
  • c#如何在类中定义静态变量

    千次阅读 2011-02-16 16:23:00
    c#如何在类中定义静态变量
  • java类中定义常量的三中方法

    千次阅读 2018-07-15 00:00:16
    主要讲解如何java类中定义常量:/** * Method One */ interface ConstantInterface { String SUNDAY = "SUNDAY"; String MONDAY = "MONDAY"; String TUESDAY = "TUESDAY"; ...
  • 在类中使用typedef定义新类型

    千次阅读 2013-07-03 22:32:25
    在类中使用typedef定义新类型,其有效范围为定义起始位置到右大括号。 任何数据和函数都不能在类外(大括号外)使用该新类型。 纯虚类中使用比较方便,可以限制新类型的作用范围,防止与其他typedef定义有名字...
  • JAVA在类中定义数组并赋值

    万次阅读 2019-01-15 15:25:46
    public class Deom { int a[]=new int[100]; a[0]=1234; a[1]=1234; a[2]=1234;...该段代码没有任何方法体内,是永远不会执行的,...赋值是一种操作,不方法体,是不能执行的。 当然,定义的同时初始化赋值是...
  • 今天跟廖雪峰大大学习Java的过程无意间发现一个小问题,就是一个文件能否创建多个的事情,我当时的代码如下: 这时很明显编译器报错了(万能的eclipse,相比其他语言的编译器用得真是舒适),它告诉我们...
  • C++ 中类在定义之前声明

    千次阅读 2011-03-06 17:09:00
    对于C++,类的定义之前声明它,如下实例代码:class B;class A{//..............................B * ptr_B;.};class B{//......................类的定义结束(编译器遇到类定义的右花括号之后),用该类来声明类实
  • 文章目录1 内部的基本概念1.1 内部定义1.2 内部的优缺点2 创建内部2.1 外部外部创建非静态内部2.2 外部外部创建静态内部2.3 外部内部创建内部语法3 内部的分类3.1 成员内部3.2 静态...
  • 比如已有一个class A, 再定义一个class B,这样B的定义中,就可以有一个A*类型的成员变量。比如class B{ A * a;};这里的B::a就是一个A*类型的指针。需要注意的是,要使用这种形式的定义,要么A的定义B的上方...
  • java中类定义的变量和类方法里面定义的变量有什么区别和联系 为什么要再方法当中定义变量,统一类里面,方法外面定义变量不是更方便快捷么
  • 类中的常量也就是成员常量,常量就是不会改变的量,是一个恒值。 定义常量使用关键字const. 例如:const PI = 3.1415326; 无论是内还是外,常量的访问和变量是不一样的,常量不需要实例化对象, 访问常量的...
  • 类中定义常量

    千次阅读 2010-12-16 21:49:00
    A: 如何在类中定义常量? Q: 如果你想得到一个可用于常量表达式的常量,例如数组大小的定义,那么你有两种选择: class X { static const int c1 = 7; enum { c2 = 19 }; char v1[c1]; ...
  • c++ 常用的在类中定义枚举的方法

    千次阅读 2019-12-25 23:22:48
    class A{ .... enum eName{ eA=0, eB, eC } }; 在类外可以如此使用: 定义变量以及赋值: A::eName val = A::eName::eB;
  • C++类中常量定义

    千次阅读 2017-03-04 12:56:05
    有时我们希望某些常量只在类中有效。由于#define定义的宏常量是全局的,不能达到目的,于是想当然地觉得应该用const修饰数据成员来实现。const数据成员的确是存在的,但其含义却不是我们所期望的。const数据成员只...
  • java中类定义位置与分类

    千次阅读 2016-12-21 21:07:22
    java最常见的定义位置是文件,一个文件可以定义多个,但是只能有一个public的,而且java文件名必须和这个public相同。看看下面代码package com.senmu.pack_a //TestA.java public class TestA{} ...
  • VC类中定义静态常量

    千次阅读 2012-07-20 14:05:35
    C++类定义常量,有以下两种方法: ...1.在类定义体内定义枚举常量;  例如:  class A  {  public:  enum  {  THREAD_NUM = 100,  MEM_BLOCK_SIZE = 1024,  PORT = 8080  };
  • java抽象定义和使用

    千次阅读 2016-11-02 16:54:34
    java虽然比较简单,但是细节的知识点还是很多的,现在,介绍...1、抽象类定义的格式修饰符 abstract 类名 { 类体 }2、抽象方法格式:修饰符 abstract 返回值类型 方法名(); 注意:抽象类的方法不一定是抽象方法,含
  • 该课程,当定义Node时,内部定义了一个Node类型的指针,那么它有什么作用呢? class Node { public: int data; Node *next; } 如果你不用Node的指针,那么意味着当你通过Node来指向链表的下一...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,538,588
精华内容 1,815,435
关键字:

在类的定义中