精华内容
下载资源
问答
  • C++ primer 的习题中给了一个初始化指针成员的例子: C/C++ code ? 1 2 3 4 5 6 7 8 struct Noname {  Noname():pstring(new std::string),i(0),d...
    C++ primer 的习题中给了一个初始化指针成员的例子:
    C/C++ code
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    struct Noname
    {
        Noname():pstring(new std::string),i(0),d(0) {} 
        private:
           std::string * pstring;
           int i;
          double d;
    };

    引用类型可以类似:
    foo() :f(*(new std::ifstream))

    初始化一个引用需要已给对象已经存在,通过形参传进来,就用全局的,或者静态的,或者使用new 临时创建一个

    //待补充
    展开全文
  • 构造函数

    2020-11-06 19:35:50
    作用:对对象创建进行初始化怎么在代码中体现: 没有返回值类型,因为构造对象创建完就结束,不需要结果。void也不写,用于区别一般函数。 名称和类名是一致的。 没有具体的返回值。 class Person{ //属性:...

    作用:对对象创建进行初始化。
    怎么在代码中体现:

    1. 没有返回值类型,因为构造对象创建完就结束,不需要结果。void也不写,用于区别一般函数。
    2. 名称和类名是一致的。
    3. 没有具体的返回值。
    class Person{
    	//属性:姓名,年龄
    	private String name;
    	private int age;
    
    	//定义构造函数,对象一创建就具备姓名
    	Person(String s){
    		//将接受到的值赋值给name
    		name = n;
    	}
    	//行为
    	public void seapk(){
    		System.out.printlm("name=" + name +"age=" +age);
    	}
    }
    
    class PersonDemo(){
    	public static void main(String[] args){
    		Person p = new Person("张三");//对象创建时,必须会调用对应的构造函数,因为对象需要初始化。
    		p.speak();
    	}
    }
    

    对象被创建时就已经调用了构造函数

    main(){
    	//调用了Person类中的空参数的构造函数,其中参数是空参数
    	//是编译器编译时在class中自动生成的
    	Person p = new Person();
    }
    
    class Person{
    	Person()();//在什么都不写时,就有了空参数构造函数
    	Person(){}//在自定义了构造函数时不会生成空参数构造函数
    }
    
    /*
    	没有定义对象的初始化过程,编译器会添加一个默认的初始化过程,
    	如果定义了指定的对象初始化过程,默认的就不添加了。
    */
    

    构造函数和一般函数的区别:

    1. 写法不一样
    2. 运行上有差别,对象一创建就会调用对应的构造函数。
      一般方法是对象创建后,才会调用所需的一半函数。
    3. 构造函数在对象创建时仅调用一次(初始化动作只做一次,且先执行),一般方法可以被调用多次。
    展开全文
  • kotlin构造函数的函数体在哪里? kotlin的函数声明结构如下 ...但是kotlin从表面看是没有构造函数体的,那么到底针对kotlin函数的初始化怎么做呢? kotlin语法中引入了init关键字,init{}代码块里,我们就可以

    kotlin的函数声明结构如下
    class Person(name:String,age:Int){
    }
    如果这个类里没有任何内容,可以省略大括号,如下:

    class Person(name:String,age:Int)

    如果我们要在类里面初始化一些变量,按照java的语法,直接在构造函数体里操作就可以了。但是kotlin从表面看是没有构造函数体的,那么到底针对kotlin函数的初始化怎么做呢?

    kotlin语法中引入了init关键字,init{}代码块里,我们就可以进行一些类的初始化操作。如下:

    class Person(name:String,age:Int){
    init{
    //类的初始化操作
    }

    }

    展开全文
  • 子对象数组在构造函数中应该怎么初始化 例如 class person { protected: int id; student st[3]; int num; public: person(string name ,char sex,int age,float score); void display(); };
  • 主要是构造函数中对基类成员初始化问题: 例如下面这句,请问怎么在UML中写出来? ``` Teacher(string name,int age,string department,string teacherNumber):Person(name,age) ``` 我写的是: +Teacher(name : ...
  • 目录 ...如何使用参数初始化表? 构造函数使用之如何根据输入变量的长度动态申请内存空间? 如下示例: #include<iostream> usingnamespacestd; #include<string> classCstudent {...

    目录

     

    构造函数使用之如何根据输入变量的长度动态申请内存空间?

    内存空间的动态申请new与动态释放delete的搭配使用

    在下列三种情况下,析构函数被自动执行

    Memset函数怎么用?它是干啥用的?

    如何使用参数初始化表?


    构造函数使用之如何根据输入变量的长度动态申请内存空间?

    如下示例:

    #include <iostream>  
    using namespace std;  
    #include<string>  
      
    class Cstudent  
    {  
    private:  
        int mark;  
        char *name;  
    public:  
        Cstudent(int mark, char *name) // 类类型内只能由一个析构函数但可以有多个构造函数  
        {  
            int i = sizeof(name);  
            this->name = new char[i];  
            memset(name, 0, i + 1); // 该函数直接对内存进行赋值操作,对于含有大量元素的数组来说极为有用  
            strcpy(this->name, name);  
      
            this->mark = mark; // this指针代表本对象的地址,this->成员变量代表对象的成员变量与函数的形参区分开来  
        }  
        ~Cstudent(); // 切记:析构函数只能有一个,它只在对象被释放的时候被调用,用来在对象被删除之前向外界传递消息  
    };  
      
    Cstudent::~Cstudent()  
    {  
        if (name) // 如果成员变量name指针不为空  
        {  
            delete[] name; // 自动判断动态申请内存大小并且释放  
        }  
        cout << "析构函数被调用,对象被释放" << endl;  
    }  
      
    int main()  
    {  
        char name[] = "超级无敌霸霸强";  
        Cstudent student(89, name);  
    }

     

     

    内存空间的动态申请new与动态释放delete的搭配使用

    这里就涉及到一个问题:在哪里用new动态申请,在哪里用delete动态释放:

    这里就引出了“构造函数”&“析构函数”:构造函数中我们可以动态申请变量,在析构函数中我们可以动态释放内存,他们两个就像一堆不可分割的兄弟,一个负责节目开始的筹备工作,一个负责节目的收尾工作,但是要注意的是析构函数是去执行内存释放前的收尾工作,并不是去操控内存删除对象,同理,构造函数不是去声明定义类对象而是在定义对象后去初始化类对象。

    如下所示:

    #include <iostream>  
    using namespace std;  
    #include<string>  
      
    class Cstudent  
    {  
    private:  
        int mark;  
        char *name;  
    public:  
        Cstudent(int mark, char *name) // 类类型内只能由一个析构函数但可以有多个构造函数  — 筹备工作show time
        {  
            int i = sizeof(name);  
            this->name = new char[i];  
            memset(name, 0, i + 1); // 该函数直接对内存进行赋值操作,对于含有大量元素的数组来说极为有用  
            strcpy(this->name, name);  
      
            this->mark = mark; // this指针代表本对象的地址,this->成员变量代表对象的成员变量与函数的形参区分开来  
        }  
        ~Cstudent(); // 切记:析构函数只能有一个,它只在对象被释放的时候被调用,用来在对象被删除之前向外界传递消息  
    };  
      
    Cstudent::~Cstudent()  // 收尾工作show time
    {  
        if (name) // 如果成员变量name指针不为空  
        {  
            delete[] name; // 自动判断动态申请内存大小并且释放  
        }  
        cout << "析构函数被调用,对象被释放" << endl;  
    }  
      
    int main()  
    {  
        char name[] = "超级无敌霸霸强";  
        Cstudent student(89, name);  
    }

     

    在下列三种情况下,析构函数被自动执行

    以下几种情况会自动调用析构函数:

    ①、如果在一个函数中定义了一个局部对象,那么当这个函数执行结束时也就是该类对象生命周期结束的时候,所以类的析构函数会被自动调用;

    ②、被声明成全局类类型或者static类类型的对象,他们的生命周期一般是在程序退出的时候,这时候该对象的析构函数才会被调用;

    ③、如果是用new操作符动态的动态创建了一个类对象,只有当用delete进行释放该对象的时候,析构函数才会被调用。

    总之,就是类对象的声明周期结束之时,就是析构函数调用之时。

    Memset函数怎么用?它是干啥用的?

    每种类型的变量都有各自的初始化方法,memset() 函数可以说是初始化内存的“万能函数”,通常为新申请的内存进行初始化工作。它是直接操作内存空间,mem即“内存”(memory)的意思。该函数的原型为:

    # include <string.h>  
    void *memset(void *s, int c, unsigned long n); 

     

    函数的功能是:将指针变量 s 所指向的前 n 字节的内存单元用一个“整数” c 替换,注意 c 是 int 型。s 是 void* 型的指针变量,所以它可以为任何类型的数据进行初始化。

    如下示例:

    # include <stdio.h>  
    # include <string.h>  
    int main(void)  
    {  
        int i;  //循环变量  
        char str[10];  
        char *p = str;  
        memset(str, 0, sizeof(str));  //只能写sizeof(str), 不能写sizeof(p)  
    }  
    // 结果:把str字符型数组初始化为{0,0,0,0,0,0,0,0,0,0}  
    

     

    如何使用参数初始化表?

    使用方式如下所示:

    class CStudent //  类类型声明原型  
    {  
    private:  
        int mark;  
        string name;  
        float height;  
    public:  
        CStudent(int Dmark, string Dname, float Dheight) :mark(Dmark), name(Dname), height(Dheight)  
        {} // 千万不要忘记大括号,即使里面为空也要写上  
        ~CStudent(){}  
    }; 

     

     

    展开全文
  • 构造函数 Constructor 主要负责在类的对象声明的时候完成对变量的初始化。 如何初始化呢?怎么体现它的优势呢?看下面两组代码: 1.未使用构造函数 class Program { static void Main(string[] args) { MyClass ...
  • 目录前言拷贝构造函数函数定义调用缺省(默认)的拷贝构造函数 -- 浅拷贝涉及指针或者内存操作用char *用char[]用string自己写的拷贝构造函数类中数据含有指针类中含有未初始化的指针数据使用容器运算符重载单目运算符...
  • //toast初始化和布局 private void showToast(final String text){ Toast toast =new Toast(context); LayoutInflater inflater =context.getLayoutInflater(); View toastLayout=inflater.inflate(R....
  • .withExecutionTimeoutInMilliseconds(timeout)) 这个通过构造函数传进来的参数好像无效了。 因此,hystrixTest2 应该因为超时,而执行 getFallback(...) ,但是并没有。</p>
  • 官方不推荐在继承了MonoBehaviour的类里使用构造函数,网上很多前辈推荐使用Start或Awake来对这些类进行初始化,但是,我想在父类和子类之间传递初始参数,请问该怎么做呢?实在是...
  • 先调用默认构造函数,再调用String::String(int n)构造函数,最后调用String& operator=(const String&x),这个就很能理解了,可是为什么之前只调用了String::String(int n)构造函数?之前那样写,究竟是怎么执行的呢...
  • string的实现

    2021-05-07 10:28:01
    构造函数,如果用最基本的构造函数,会怎么样 class string { public: string() :_str(nullptr) {} string(char* s) :_str(s) { } 这样子初始化的常量字符串,不能被修改,被存放再代码段,且扩...
  • C++ 类的四大函数

    2014-08-08 19:33:28
    一个C++类一般至少有四大函数,即构造函数、拷贝构造函数、析构函数和赋值函数,一般系统都会默认。...它就是为String类申明一个对象str并把它初始化,具体把str初始化成什么,这当然就是函数体怎么写的
  • 相关属性由带参构造函数进行初始化; (1)定义其友元函数showinfo将该类对象的相关信息进行输出。 (2)定义其友元类inerviewer,具有成员函数showinfo,用于将interviewee的对象信息进行输出。 (3)在主函数中...
  • {//实例一个节点作为持续的栈底和当前的栈顶,长度初始为0 Node<T> node = new Node(); down = node; top = node; len = 0; } public Stack(Stack<T> value)//从另外一个栈复制数据 { Node<T> ...
  • 一般遇到这种情况主要是因为你C++的构造函数没有进行初始化 举例: 现在我的头文件有一个Grandpa类: #include <iostream> #include <string> using namespace std; class Grandpa { public: // ...
  • 完成相应的构造函数,拷贝构造函数, 赋值函数等; 成员函数:CGISPoint GetGCenter(); //一个求GIS目标的重心 在main()中定义CGISOBJ的对象,初始化,然后调用求GIS目标的重心函数,输出结果。
  • 生日birthday,GregorianCalender类型 那生日这个变量怎么在有参构造函数里传参啊。一直出错啊不知道怎么办。谢谢。 ![图片说明](https://img-ask.csdn.net/upload/201602/16/1455609460_625542.jpg) ![图片说明]...
  • 高质量C++/C编程指南

    2008-11-06 11:13:01
    9.2 构造函数初始化表 70 9.3 构造和析构的次序 72 9.4 示例:类STRING构造函数与析构函数 72 9.5 不要轻视拷贝构造函数与赋值函数 73 9.6 示例:类STRING的拷贝构造函数与赋值函数 73 9.7 偷懒的办法处理拷贝...
  • Linq基础必备

    2017-02-25 15:16:00
    1.linq基础必备之对象初始化器和匿名类型因果分析 3. ... 在没有初始化器之前的时候,我们是怎么初始化的呢???  1. 构造函数初始化。。。 public Student(string Name, int Age) { this.Name = N...
  • 一. this有什么用?我们用例子的形式来体现一下。 下面的截图说明,给人对象一初始化的时候,赋值个姓名。...我们看到描述类中,有Person(String n)这个构造函数,至于构造函数里面是怎么写的,我们不知道...
  • //初始化图片 image1 = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/1.jpg")); image2 = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/2.jpg")); image3 = ...
  • C++中必须知道的问题

    2014-01-03 15:41:40
    把前段时间学习c++中遇到的...4.构造函数初始化列表的作用 5.为什么最好不要在构造函数和析构函数中调用虚函数 6.虚函数表是怎么回事 7.虚函数指针vptr存在于一个对象的什么位置,其作用是什么 8.一个string对象的
  • 高质量编程C++、C

    2011-06-01 13:42:23
    9.2 构造函数初始化表 9.3 构造和析构的次序 9.4 示例:类String构造函数与析构函数 9.5 不要轻视拷贝构造函数与赋值函数 9.6 示例:类String的拷贝构造函数与赋值函数 9.7 偷懒的办法处理拷贝构造函数与...
  • 高质量C C编程指南

    2008-10-28 13:59:27
    9.2 构造函数初始化表 9.3 构造和析构的次序 9.4 示例:类STRING构造函数与析构函数 9.5 不要轻视拷贝构造函数与赋值函数 9.6 示例:类STRING的拷贝构造函数与赋值函数 9.7 偷懒的办法处理拷贝构造函数与赋值...
  • #include <iostream>... //原来在函数体做的初始化操作都可以放到初始化参数列表中做 //拷贝构造居然可以也在参数化列表里完成虽然看上去不怎么好看 ValueLikeClass(const string& s =
  • 而new/delete操作符则更加智能,他们知道分配多少内存以及怎么初始化它们(构造函数),也知道释放多少内存以及怎么析构内存里面的对象。实例如下:   string* str1 = static_cast<string*>(malloc(10*...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 158
精华内容 63
关键字:

构造函数怎么初始化string