精华内容
下载资源
问答
  • 定义类和声明类区别是什么?请举例说明?定义类和声明类区别是什么?请举例说明?
  • C++ 类声明 前置声明范例

    千次阅读 2019-07-19 18:47:40
    在编写C++程序的时候,偶尔需要用到前置声明...这是必须的,因为A中用到了B,而B的声明出现在A的后面。如果没有B的前置说明,下面的程序将不同通过编译,编译器将会给出类似“缺少类型说明符”这样的出...

    转载自http://www.cnblogs.com/staring-hxs/p/3244251.html

    在编写C++程序的时候,偶尔需要用到前置声明(Forward declaration)。下面的程序中,带注释的那行就是类B的前置说明。这是必须的,因为类A中用到了类B,而类B的声明出现在类A的后面。如果没有类B的前置说明,下面的程序将不同通过编译,编译器将会给出类似“缺少类型说明符”这样的出错提示。

    代码一:
    
    // ForwardDeclaration.h
    #include <iostream>
    using namespace std;
    class B;             // 这是前置声明(Forward declaration)
    class A
    {
    private:
             B* b;
    public:
             A(B* b):b(b){}
    };
    
    class B
    {
    };
    
    // Main.cpp
    #include "ForwardDeclaration.h"
    int main(int argc, char** argv)
    {
             B* b = new B();
             A* a = new A(b);
             delete a;
             delete b;
             return 0;
    }

    上面程序可以顺利编译和运行(几乎没有做什么,也没有输出)。

    是不是有了前置说明就万事大吉了呢?我们看看下面的代码(带阴影部分的代码是新增加的):

    代码二:
    
    
    // ForwardDeclaration.h
    #include <iostream>
    using namespace std;
    class B;             // 这是前置声明(Forward declaration)
    class A
    {
    private:
             B* b;
    public:
             A(B* b):b(b){}
            void someMethod()
             {
                b->someMethod();                                                  // (1)
             }
    };
    
    class B
    {
    public:
          void someMethod()
           {
              cout << "something happened..." << endl;
           }
    };
    // Main.cpp
    #include "ForwardDeclaration.h"
    int main(int argc, char** argv)
    {
             B* b = new B();
             A* a = new A(b);
        a->someMethod();
        delete a;
        delete b;
        return 0;
    }

    一编译,发现代码(1)处出错。出错提示往往包括(不同的编译器给出的提示会有所不同):

    1. 使用了未定义的类型B;

    2. “->somemethod”的左边必须指向类/结构/联合/泛型类型

    原因:

    1. (1)处使用了类型B的定义,因为调用了类B中的一个成员函数。前置声明class B;仅仅声明了有一个B这样的类型,而并没有给出相关的定义,类B的相关定义,是在类A后面出现的,因此出现了编译错误;

    2. 代码一之所以能够通过编译,是因为其中仅仅用到B这个类型,并没有用到类B的定义。

    解决办法是什么?

    将类的声明和类的实现(即类的定义)分离。如下所示:

    // ForwardDeclaration.h   类的声明
    #include <iostream>
    using namespace std;
    class B;             // 这是前置声明(Forward declaration)
    class A
    {
    private:
             B* b;
    public:
            A(B* b);
    void someMethod();
    };
    
    class B
    {
    public:
    void someMethod();
    };
    // ForwardDeclaration.cpp        类的实现
    #include "ForwardDeclaration.h"
    A::A(B* b):b(b)
    {
    
    }
    
    void A::someMethod()
    {
        b->someMethod();
    }
    
    void B::someMethod()
    {
        cout << "something happened..." << endl;
    }
    // Main.cpp
    #include "ForwardDeclaration.h"
    int main(int argc, char** argv)
    {
             B* b = new B();
             A* a = new A(b);
             a->someMethod();
         delete a;
             delete b;
         return 0;
    }

    结论:

    前置声明只能作为指针或引用,不能定义类的对象,自然也就不能调用对象中的方法了。

    而且需要注意,如果将类A的成员变量B* b;改写成B& b;的话,必须要将b在A类的构造函数中,采用初始化列表的方式初始化,否则也会出错。关于这点

    展开全文
  • Java - 声明类的方法

    千次阅读 2014-04-21 22:26:24
    声明类的方法 本文地址:http://blog.csdn.net/caroline_wendy 方法首部\返回类型\形式参数. 方法首部: 方法命名约定, 驼峰约定(camel casing), cas: Capital And Small. 形式参数: 可以通过实参的值来控制方法. ...

    声明类的方法

     

    本文地址: http://blog.csdn.net/caroline_wendy/article/details/24273097

     

    方法首部\返回类型\形式参数.

    方法首部: 方法命名约定, 驼峰约定(camel casing), cas: Capital And Small.

    形式参数: 可以通过实参的值来控制方法.

    返回类型: 方法只能返回一个结果, 但可以通过集合的形式返回多个引用.

     

    方法, 即一个由特定对象执行的函数.

     

    Java类中, 特征(属性和方法)声明的相对顺序是无关紧要的.

    编程习惯:在类声明的最前面统一声明所有的属性, 即在类方法声明之前声明属性.

     

    返回语句, return, 是跳出方法的语句, 可以返回void, 即不返回任何信息.

    编程习惯: 一个方法中只在最末尾包含一个return语句,除非方法执行一系列操作, 一步失败, 即整个方法失败.

     

    方法内部定义业务逻辑(业务规则).

     

     

     

    展开全文
  • C++ 类声明 前置声明

    千次阅读 2017-11-16 16:21:13
    参考自:... 关于前置类型声明的注意点: 代码一: class B; class A { public: B* aData; A(B* b) :aData(b) {} }; class B {}; 上述代码能够通过编译。 代码二: class B;

    参考自:https://www.cnblogs.com/fwycmengsoft/p/4061989.html

    关于前置类型声明的注意点:


    代码一:

    class B;

    class A
    {
    public:
    B* aData;
    A(B* b) :aData(b) {}
    };

    class B {};

    上述代码能够通过编译。


    代码二:

    class B;

    class A
    {
    public:
    B aData;
    A(B b) :aData(b) {}
    };

    class B {};

    上述代码报错。Error List:

    C2079 'A::aData' uses undefined class 'B'

    C2027 use of undefined type 'B'

    C2439 ‘A::aData': member could not be initialized


    问题总结:上述两段代码中仅仅相关了一个指针,而编译结果不同。

    结论:前置类型声明只能作为指针或者引用,不能定义类的对象,所以也不能调用对象中的方法(包括构造函数)。

    展开全文
  • * 声明类Person,包含2个成员变量:name、age。定义函数sayHello(),调用时输出:我叫***,今年***岁了。声明类Chinese继承Person */ public class Person { private String name;//姓名 String gender;//性别 ...
    /*
     *第7题:
     * 声明类Person,包含2个成员变量:name、age。定义函数sayHello(),调用时输出:我叫***,今年***岁了。声明类Chinese继承Person
     */
    public class Person {
    private String name;//姓名
        String gender;//性别
        public int age;//年龄
    
    /*
    * 类成员的访问控制修饰符
    * 1,private只在同一类中可以使用
    * 2,无修饰符 在同一类,同一包下的类可以使用
    * 3,protected 在同一类,同一包,其子类可以使用
    * 4,public  在任何地方都可以使用
    */
    /*
    * 1,将属性私有化
    * 2,设置get/set方法
    * 3,设置必要的读取限制
    */
    
    
    
    public String getName() {
    return name;
    }
    
    
    public void setName(String name) {
    this.name = name;
    }
    
    
    public String getGender() {
    return gender;
    }
    
    
    public void setGender(String gender) {
       if(gender.equals("男")||gender.equals("女"))
    this.gender = gender;
       else
        System.out.println("***性别不合法***");
    }
    
    
    public int getAge() {
    return age;
    }
    
    
    public void setAge(int age) {
    if(age<0||age>150){
    System.out.println("***年龄不合法***");
    return;
    }
    this.age = age;
    }
    
    
    //构造方法
    public Person(){
    this.name = "无名氏";
    this.gender = "男";
    this.age = 18;
    }
    
    public Person(String name,String gender,int age){
    this.name = name;
    this.gender = gender;
    this.age = age;
    }
    
    //方法自我介绍
    public void say(){
    System.out.println("自我介绍一下\r\n姓名:"+this.name+"\r\n性别:"
    +this.gender+"\r\n年龄:"+this.age+"岁");
    
    }
    
    
    }
    
    
    
    
    
    2.
    
    package com.itheima;
    
    
    public class PersonTest {
    
    
    
    
    public static void main(String[] args) {
    Person hanbing=new Person();
    /*hanbing.name="韩冰";
    hanbing.age=200;
    hanbing.gender="中性";*/
    
    hanbing.setName("韩冰");
    hanbing.setAge(200);
    hanbing.setGender("中性");
       //hanbing.gender="男";
    //hanbing.age=25;
    //hanbing.age =25;
    hanbing.say();
    
    
    }
    
    
    }
    
    
    
    3.
    
    package com.itheima2;
    import com.itheima.Person;
    public class PersonTest {
    
    
    
    public static void main(String[] args) {
    Person hanbing=new Person();
    hanbing.say();
    //hanbing.age =25;
    
    
    }
    
    
    }

    展开全文
  • C++在命名空间中声明类和成员函数

    千次阅读 2017-04-06 17:22:11
    C++在命名空间中声明类和成员函数 标签: c++名称空间类 2014-04-14 17:10 1632人阅读 评论(0) 收藏 举报  分类: C++(71)  来源:网络 作者:未知 虽然很多程序员都熟悉名字...
  • 声明类和定义对象

    千次阅读 2018-08-11 18:53:04
    声明 class Date { private: //声明以下成员为私有 int hour; int minute; int second; public: //声明以下成员为公有 void display() { cout &lt;&lt; hour &lt;&lt; endl; c...
  • 例如有如下类,class A ...怎么声明类A的成员函数指针或成员变量指针呢?int* (A::*func_ptr) (void) = &A::func; int A::*obj_ptr = &A::mem;上面声明了指向成员函数func的函数指针,和指向成员变量mem的变量指针
  • C#中声明类/属性/方法已过时(Obsolete)

    万次阅读 2014-03-24 00:54:03
    C#中声明类/属性/方法已过时(Obsolete) Obsolete 属性用于声明类/属性/方法已过时。 例子: [Obsolete("This class is obsolete; use class B instead")] class A { [Obsolete("This function is ...
  • jsp 声明类的使用

    千次阅读 2014-06-27 12:52:51
    可以在””之间声明一个,该在JSP页面内有效,即在JSP页面的Java程序片部分可以使用该创建对象。在下面的例子中,我们定义了一个Circle,该的对象负责求圆的面积和周长。当客户向服务器提交圆的半径后,该...
  • ES6--javascript 声明类(class)

    千次阅读 2018-04-09 22:58:50
    在ES5的时候,构造函数,也就是,这样声明:function Person(){ this.name = 'name'} 像这种构造函数怎么去表明自己是一个构造函数呢?(任何函数和new 一起用都可以看成构造函数,这里指的是“正常“的构造函数...
  • 因为对一个来说,在我们创建它的对象之前该必须被定义过,而不能仅仅被声明。 否则,编译器就无法了解这样的对象需要多少存储空间。类似的,也必须首先被定义,然后 才能引用或者指针访问其成员。毕竟,...
  • class Human//声明一个Human { //声明相关的成员方法 public :  int GetWeight();  double GetHeight();  void SetWeight(int x);  void SetHeight(double y);...
  • 思路: 1,创建一个student里面包含 name,age, score,三个变量。  2,设置成私有, 对外提供set,get,方法。  3,在主函数中创建student("张三", 22, 95)类型的对象。 */ class Demo6
  • using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication8 { public class person { public String name; public int age;
  • 转载:http://blog.csdn.net/girl2523/article/details/6307506 我们知道每种语言都有它自己的不同等级的访问权限, 而c#中也有4种, 它们是:   修饰符 内部 同一个包 子类 任何地方 private
  • #include #include class Mammal { protected:  char name[10]; public:  virtual void set()  {  strcpy(name,"哈哈");    }  virtual void speak() ...class Dog:public Mammal
  • cpp————声明 定义 实现

    千次阅读 2017-02-10 15:56:13
    声明,又称的前向声明,即forward declaration,告诉编译器class类型,但当前并不知道class具体细节,是不完全类型 声明只能用于指针(引用)类型,因为指针(引用)类型字长固定,编译器知道分配多少内存空间...
  • 声明的定义,声明的定义?声明的定义,声明的定义?
  • 声明和对象的定义

    千次阅读 2018-01-26 20:33:08
    声明类类型,再用它去定义若干个同类型的对象。类是对象的模板。 类是抽象的,不占用内存。对象是具体的,占用内存。 2.声明类类型的方法跟声明结构体类型相似。格式如下: class 类型名 //类头 {private:
  • Java的定义、声明及使用

    千次阅读 2020-03-01 23:15:22
    一、声明 在使用前,必须先声明,然后才可以声明变量,创建对象。 声明语法如下: [标识符] class 类名{ //的属性 //的方法 } 名称遵循标识符命名规则与规范,这里不做详细讲解,有兴趣的...
  • 今天在写程序的时候遇到了这个错误,原因很简单,就是在头文件中声明类的时候,函数的声明写错了,例如: class a { a(); //构造函数 ~a();//析构函数 int max( int A , int B);//正确的声明方法 int...
  • 【C++】中静态成员的声明、初始化中静态成员的声明初始化静态数据成员值的改变完整例子 有参考大佬 零点零一 的文章:https://blog.csdn.net/thanklife/article/details/78476737 中静态成员的声明 中的静态...
  • JAVA声明复数

    万次阅读 多人点赞 2018-10-09 22:33:27
    声明复数,成员变量包括实部和虚部,成员方法包括实现由字符串构造复数、复数加法、减法,字符串描述、比较相等等操作。 虽然我只是一个刚学一个月JAVA的菜鸡,但是强迫症让我把复数乘法和除法一起写出来了。 ...
  • C++ 中在定义之前声明

    千次阅读 2011-03-06 17:09:00
    对于C++中,类的定义之前声明它,如下实例代码:class B;class A{//..............................B * ptr_B;.};class B{//......................在类的定义结束(编译器在遇到类定义的右花括号之后),用该类来声明类
  • C++的前向声明(forward declaration)

    万次阅读 2018-06-08 14:29:27
    一、使用场景假设有两个类A和B,类A要将类B的对象作为自己的成员使用,并且类B将类A...二、使用方法假设B类中已经包含了a.h,那么在A类中不能再包含b.h,要在A类中前向声明类B,如下# include "B.h" clas...
  • JSP声明定义网页范围的变量、函数或类 内容提要:JSP声明定义网页范围的变量、函数或类...包括变量声明、方法声明和声明类三种。 JSP声明定义网页范围的变量、函数或类,让页面的其余部分能够使
  • 声明类模板,包含姓名与年龄。 生成类(包含姓名与年龄) 调用时 必须显示指定类型或指定默认的参数类型。 显示指定类型: Person<string, int> p1("张三",22); 对应在模板中的参数类型就是: 姓名——...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,845,928
精华内容 738,371
关键字:

如何声明类