精华内容
下载资源
问答
  • 在学习群里面看到一位同学问——一个类中可以定义多个空参数的构造方法吗 我当是在想应该不行的吧,然后看到那个问问题的同学说:“可以再定义局部类的空参构造方法”,然后自己看了一下关于局部类的知识确实阔以,...

    在学习群里面看到一位同学问——一个类中可以定义多个空参数的构造方法吗
    我当是在想应该不行的吧,然后看到那个问问题的同学说:“可以再定义局部类的空参构造方法”,然后自己看了一下关于局部类的知识确实阔以,话不多说,上代码。

    package e01;
    
    public class jvav {
    
    	public static void main(String[] args) {    
    		Outer outer=new Outer();
    		Outer.Inner inner = outer.new Inner(); // 创建内部类对象
    		inner.show1(); // 测试在成员内部类中访问外部类成员变量和方法
    		outer.test2(); // 测试在外部类中访问内部类成员变量和方法
    	}
    }
    
    //定义外部类Outer
    class Outer {
    	Outer(){
    		System.out.println("调用了外部类的无参构造函数");
    	}
    	int m = 0; // 定义外部类的成员变量
    	// 定义外部类成员方法
    	void test1() {
    		System.out.println("外部类成员方法");
    	}
    	// 定义成员内部类Inner
    	class Inner {
    		Inner(){
    			System.out.println("调用了内部类的无参构造函数");
    		}
    		int n = 1;
    		// 1、定义内部类方法,访问外部类成员变量和方法
    		void show1() {
    			System.out.println("外部类成员变量m="+m);
    			test1();
    		}
    		void show2(){
    			System.out.println("内部类成员方法");
    		}
    	}
    	// 2、定义外部类方法,访问内部类变量和方法
    	void test2() {
    		Inner inner = new Inner();
    		System.out.println("内部类成员变量n="+inner.n);
    		inner.show2();
    	}
    }
    

    看完上述代码就该就清楚了吧,我生成的的是成员内部类,那估计局部内部类应该也行,不得不说他们是真滴牛

    展开全文
  • 一个class只能有一个用于构造对象的__init__函数但python中的变量是无类型的,因此传给__init__的参数可以是任何类型python中的函数参数在定义时可以有默认值,可以让__init__函数接受多个参数,在后面的一些参数给...
    不行,一个class只能有一个用于构造对象的__init__函数
    但python中的变量是无类型的,因此传给__init__的参数可以是任何类型
    python中的函数参数在定义时可以有默认值,可以让__init__函数接受多个参数,在后面的一些参数给出默认值的方法让__init__接受不同个数的参数,并且执行类型检查执行不同的代码,用上述方法实现类的构造函数的多态性

    转载于:https://www.cnblogs.com/ExMan/p/8457121.html

    展开全文
  • 定义个构造函数

    千次阅读 2019-08-18 23:18:09
    问题 如果想让用户能够以多种方式...4.当定义一个有着多个构造函数时,应该让__init()__尽可能的简单(例如做一些赋值操作外,其它什么都不做;如果需要的话,可以在其备选的构造函数中选择实现理高级的操作)

    问题

    如果想让用户能够以多种方式创建实例,而不局限于__init()__方法,可以用下面的解决方案

    
    import time
    
    
    class Date:
        #primary constructor
        def __init__(self, year, month, day):
            self.year = year
            self.month = month
            self.day = day
    
        # alternate constructor
        @classmethod
        def today(cls):
            t = time.localtime()
            return cls(t.tm_year, t.tm_mon, t.tm_mday)
    
        def __repr__(self):
            return "year:%s, month:%s, day:%s" % (self.year, self.month, self.day)
    
        def __str__(self):
            return self.__repr__()
    
    
    if __name__ == '__main__':
        a = Date(2019, 8, 10)
        b = Date.today()
        print(a)
        print(b)
    
    

    讨论

    1.类方法的一大主要用途就是定义其它可选的构造函数。
    2.类方法的一个关键特性是把类作为其接收的第一个参数(cls).
    3.类方法中会用到这个类来创建并返回最终的实例
    4.当定义一个有着多个构造函数的类时,应该让__init()__尽可能的简单(例如做一些赋值操作外,其它什么都不做;如果需要的话,可以在其备选的构造函数中选择实现理高级的操作)

    展开全文
  • 对于派生构造函数,在定义对象时构造函数的执行顺序为? 1:成员对象的构造函数 2:基类的构造函数 3:派生本身的构造函数 顺序为213; 当派生中不含对象成员时 · 在创建派生对象时,构造函数的执行...
    
    牛客网原题,记录下来。。
    对于派生类的构造函数,在定义对象时构造函数的执行顺序为?
    1:成员对象的构造函数
    2:基类的构造函数
    3:派生类本身的构造函数
    顺序为213;
    当派生类中不含对象成员时
    · 在创建派生类对象时,构造函数的执行顺序是:基类的构造函数→派生类的构造函数;
    · 在撤消派生类对象时,析构函数的执行顺序是:派生类的构造函数→基类的构造函数。
    当派生类中含有对象成员时
    · 在定义派生类对象时,构造函数的执行顺序:基类的构造函数→对象成员的构造函数→派生类的构造函数;
    · 在撤消派生类对象时,析构函派生类的构造函数→对象成员的构造函数→基类的构造函数。
    具体可参考下列程序:
    #include <iostream>
    using namespace std;
     
    class Test {
    public:
        Test() {
            cout << "Test constructing!" << endl;
        }
        ~Test() {
            cout << "Test destructing!" << endl;
        }
    };
    class Base {
    public:
        Base() {
            cout << "Base constructing!" << endl;
        }
        ~Base() {
            cout << "Base destructing!" << endl;
        }
    };
     
    class Derived : public Base {
    public:
        Derived() {
            cout << "Derived constructing!" << endl;
        }
        ~Derived() {
            cout << "Derived destructing!" << endl;
        }
        Test test;    
    };
     
    int main()
    {
        Derived* derived = new Derived;
        delete derived;
     
        system("pause");
    }
    运行结果为:(VS2015)
    Base constructing!
    Test constructing!
    Derived constructing!
    Derived destructing!
    Test destructing!
    Base destructing!
    


    一直把new对象和直接声明对象搞不清;看见csdn上别人这样解释,记录下!
    编译器把内存分为三个部分:
    1.静态存储区域:主要保存全局变量和静态变量。 生存期:整个程序。
    2.堆:存储动态生成的变量。生存期:自己来决定。
    3.栈:存储调用函数相关的变量和地址等。生存期:所处的语句块(既{}的范围)

    假设定义一个类Myclass
    (1)声明创建对象
    我们要创建对象的时候就是直接  Myclass myclass;  这时在栈中已经为它分配了一个空间存放所有的成员变量,但是为了节约内存空间 成员函数 被存放在了一个公共区域,这个类的所有的对象都可以共同享有。
    调用这个对象的成员变量和成员函数时用“.”操作符。如:myclass.value,myclass.function()。
    (2)new 对象
    用这种方法创建对象时我们采取这样的方法  Myclass *myclass = new Myclass();   通过new创建的实例返回的是对象指针(myclass指向一个Myclass的对象),同时在堆上为它分配空间,并且需要显式的释放空间, delete 对象的时候才会调用对象的析构函数。
    因为是指针的操作,所以调用这个对象的成员变量和函数时要用“->” 例如 myclass.value ,myclss->function()。
    总结:
    事实上两种方式效果相同,我们在选择用哪种方式的来创建的时候主要考虑的就是,你想让这个对象存活多久。



    展开全文
  • 类的构造函数看似简单,实则很有玄机,在构造一个类构造函数时,只要遵循以下步,便可以建立出一个正确的高效的构造函数:  1.了解C++编译器默默编写并调用了哪些函数,若不想使用编译器自动生成的函数, 就该...
  • 一个类的对象作为另一个类的数据成员。 &nbsp; &nbsp; &nbsp; &nbsp;一个类中的数据成员除了可以是int, char, float等这些基本的数据类型外,还可以是某一个类的一个对象。用子对象创建新类。 &...
  • 内联函数: 关键字是inline,如下应用:inline void fun() { cout ; }内联函数与普通函数的区别如下:(相当于内联函数省去了步骤2和4) ...定义就是函数体在外面,分为同文件定义和分文件定义。在
  • 定义平面中的一个Circle, 1编写一个无参数构造函数, 2编写一个有参的构造函数 3在主函数中调用无参构造函数生成圆的实例c1,调用有参构造函数生成圆的实例c2,调用实例方法判断c1和c2是否重叠   import java....
  • 构造函数 ,是一种特殊的方法 。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new...特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载。
  • 构造函数

    千次阅读 2016-03-07 22:28:52
    构造函数的函数名与类名相同,没有返回类型,不声明为const成员函数(因为直到构造函数初始化过程后,对象才能真正的取得其常量属性)一个类中可以有多个构造函数。构造函数有一个初始化列表。   &构造函数初始...
  • C++中构造函数与复制构造函数

    千次阅读 2017-04-27 10:52:42
    在网络上有朋友提到“主要原因在于编译器的优化,当复制构造函数是public时,编译器就会根据这特性来对代码进行优化。当程序运行时,编译器发现复制构造函数是public,则说明程序允许对象之间的复制,此时就会通过...
  • c++构造函数分类说明

    千次阅读 2017-07-15 15:43:23
    3. 构造函数可以被重载,但是每次对象创建时只会调用其中的一个; 我们可以将构造总结为以下几类,不同入参决定调用不同的构造函数,它们分别是普通构造函数 、默认构造函数 、拷贝构造函数 、转换构造函
  • C++中的——构造函数

    千次阅读 2018-08-29 13:57:31
    个类都分别定义了它的对象被初始化的方式,类通过一个几个特殊的成员函数来控制其对象的初始化过程,这些函数叫构造函数构造函数的任务是初始化类对象的数据成员,无论何时只要类的对象被创建,就会执行构造...
  • 初始化列表是用于构造函数参数的初始化,与其他函数不同,构造函数除了有名字,参数列表和函数体之外,还可以有初始化列表,初始化列表以冒号开头,后跟系列以逗号分隔的初始化字段。 如: class myClock { ...
  • 书上提到没有定义构造函数时进行显式初始化成员,我很纳闷,不是说没有定义构造函数的时候会合成默认构造函数吗,自己查了下,果然查到了一下转载的内容:不是未定义构造函数就一定会合成默认构造函数的!...
  • 【C++】C++和对象、构造函数和析构函数

    千次阅读 多人点赞 2018-06-03 20:32:37
    类 类是对某一事物的抽象描述,具体地讲,类是C++中的一种构造的数据类型。它即可包含描述事物的数据,又可包含处理这些...定义一个类的一般格式为: class 类名{ private: 成员表1; public: 成员表2; protected:...
  • c++ 派生构造函数 与 基类构造函数的关系

    千次阅读 多人点赞 2019-05-22 10:35:00
    《面向对象程序设计基础(第二版》李师贤等,第254页:C++语言的基本规则是:创建一个派生的对象时,如果基类带有构造函数,则先调用基类的构造函数,然后才调用派生构造函数。 《Thinking in C++》,刘宗田...
  • C++默认构造函数

    万次阅读 多人点赞 2018-02-08 12:43:51
    本文围绕3问题来理解C++的默认构造函数: 什么是默认构造函数? 默认构造函数什么时候被调用? 编译器在什么情况下会生成默认构造函数. 什么是默认构造函数? 我们一般会认为默认构造函数就是编译器...
  • 题目:建立一个名为Student的,该有以下几个私有成员变量:学生姓名、学号、性别、年龄。还有以下两个成员函数:一个用于初始化学生姓名、学号、性别和年龄的构造函数一个用于输出学生信息的函数。编写一个...
  • C++派生构造函数构造函数的执行顺序)

    万次阅读 多人点赞 2018-06-16 16:01:55
     构造函数被继承,构造函数被继承是有道理的,因为即使继承了,它的名字和派生的名字也不一样,不成为派生构造函数,当然更不成为普通的成员函数。  在设计派生时,对继承过来的成员变量...
  • 自定义View的四个构造函数

    千次阅读 2019-03-29 13:51:16
    自定义View继承View或者ViewGroup都会让我们实现构造函数,通常会实现一个参数的构造函数,两个参数的构造函数和三个参数的构造函数,它们有什么区别,又为什么要实现这么多构造函数呢? public class DemoView77 ...
  • C++中默认构造函数构造函数初始化列表

    千次阅读 多人点赞 2018-12-13 10:59:45
    1、默认构造函数构造函数 ...一个类如果自己没有定义构造函数,则会有一个无参且函数体也是空的默认构造函数。只要程序员定义构造函数,编译器就不会再提供默认构造函数了。 定义默认构造函数有两种方式,...
  • 默认构造函数构造函数重载

    万次阅读 多人点赞 2017-09-29 08:15:52
    对象被创建时,编译器为对象分配内存空间,并自动调用该构造函数,由构造函数完成数据成员的初始化工作。、默认构造函数 从代码层面进行分析 class testClass { public : testClass();//不带参数的默认
  • 关于 C++ 默认构造函数几个误区

    千次阅读 2012-11-01 20:33:17
    C++新手一般有两个常见的误解: 1.任何class如果没有定义default constructor,就会被合成一个来。 2.编译器合成出来的...1、每个类必须至少有一个构造函数,否则没法创建对象; 2、若programer没有提供任何构造
  • 的那些函数~~~
  • C++构造函数详解

    千次阅读 2016-12-26 15:07:44
    一、概念 1.控制对象初始化过程的一个几个特殊的成员函数,叫做...1.它的产生:如果没有为显式的定义任一构造函数,那么编译器合适的时候会为我们隐式的定义一个默认构造函数,它又被称为合成的默认构造函数。 2

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 470,020
精华内容 188,008
关键字:

一个类能定义几个构造函数