程序设计实习作业 02 各种构造函数和析构函数

//输出 9 22 5

#include <iostream>
using namespace std;
class Sample {
public:
    int v;
    Sample(int n){
        v = n ;
    }
    Sample(){

    }
    Sample(const Sample & a){
        v = a.v + 2;
    }

};
void PrintAndDouble(Sample o)
{
    cout << o.v;
    cout << endl;
}
int main()
{
    Sample a(5);
    Sample b = a;
    PrintAndDouble(b);    //注意这里调用了复制构造函数
    Sample c = 20;
    PrintAndDouble(c);    //注意这里调用了复制构造函数
    Sample d;
    d = a;
    cout << d.v;     //本来是5,用printanddouble输出就多了2
    return 0;
}
//先输出123
然后输出 m,n

#include <iostream>
using namespace std;
class A {
    public:
        int val;

        A(int a){
            val = a;
        }

        A(){
            val = 123;
        }
        A & GetObj(){
            return *this;   //返回 GetObj成员函数 作用的对象
        }

};
int main()
{
    int m,n;
    A a;
    cout << a.val << endl;
    while(cin >> m >> n) {
        a.GetObj() = m;
        cout << a.val << endl;
        a.GetObj() = A(n);
        cout << a.val<< endl;
    }
    return 0;
}
//重载 ”=“ 给复数赋值

#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;
class Complex {
private:
    double r,i;
public:
    void Print() {
        cout << r << "+" << i << "i" << endl;
    }

    Complex operator=(const char* a){
        string s = a;
        int pos = s.find("+",0);   //从0号开始查找“+“的位置
        string sTmp = s.substr(0,pos);   // 不考虑“”  从第0位开始截取长度为pos的字符串 此处pos=1
        r = atof(sTmp.c_str());
        string sTmp1 = s.substr(pos+1,s.length()-2-pos);  // 从pos+1位开始截取s.length-2-pos长度的字符串 此处为1
//封闭类对象的初始化

#include <iostream>
#include <string>
using namespace std;
class Base {
public:
    int k;
    Base(int n):k(n) { }
};
class Big
{
public:
    int v;
    Base b;

    Big(int n):v(n),b(n){    //直接调用成员对象的类型转换构造函数
    }

};
int main()
{
    int n;
    while(cin >>n) {
        Big a1(n);
        Big a2 = a1;
        cout << a1.v << "," << a1.b.k << endl;
        cout << a2.v << "," << a2.b.k << endl;
    }
}
//复制构造函数 和 析构函数 在临时对象生成时的作用

#include <iostream>
using namespace std;
class Apple {
    public:
    static int nTotalNumber;   //全局变量
    Apple(){
        nTotalNumber ++;    //无参初始化的时候 总数加一
    }
    ~Apple(){
        nTotalNumber --;   //临时变量消失时 总数也减一
    }
    static void PrintTotal() {
        cout << nTotalNumber << endl;
    }

};
int Apple::nTotalNumber = 0;
Apple Fun(const Apple & a) {
    a.PrintTotal();
    return a;
}
int main()
{
    Apple * p = new Apple[4];    //无参构造函数调用4次
    Fun(p[2]);    //Fun函数的返回值是Apple类型的临时对象,消失时使得总数减一
    Apple p1,p2;  //无参构造函数调用两次
    Apple::PrintTotal ();   //4-1+2
    delete [] p;  //5-4
    p1.PrintTotal ();
    return 0;
}
        i = atof (sTmp1.c_str());
        return *this;
    }

};
int main() {
    Complex a;
    a = "3+4i"; a.Print();
    a = "5+6i"; a.Print();
    return 0;
}

原文地址:https://www.cnblogs.com/Latticeeee/p/8537688.html

时间: 2024-10-07 17:56:23

程序设计实习作业 02 各种构造函数和析构函数的相关文章

程序设计实习MOOC / 继承和派生——编程作业 第五周程序填空题1

描述 写一个MyString 类,使得下面程序的输出结果是: 1. abcd-efgh-abcd- 2. abcd- 3. 4. abcd-efgh- 5. efgh- 6. c 7. abcd- 8. ijAl- 9. ijAl-mnop 10. qrst-abcd- 11. abcd-qrst-abcd- uvw xyz about big me take abcd qrst-abcd- 要 求:MyString类必须是从C++的标准类string类派生而来.提示1:如果将程序中所有 "My

在构造函数和析构函数中调用虚函数------新标准c++程序设计

在构造函数和析构函数中调用虚函数不是多态,因为编译时即可确定调用的是哪个函数.如果本类有该函数,调用的就是本类的函数:如果本类没有,调用的就是直接基类的函数:如果基类没有,调用的就是间接基类的函数,以此类推.例如: #include<iostream> using namespace std; class A { public: virtual void hello(){cout<<"A::hello()"<<endl;} virtual void

C++基本要点复习--------coursera程序设计实习(PKU)的lecture notes

因为一些特性复杂,很多时候也用不到一些特性,所以忘记了,算是随笔,也当作一个临时查找的手册.没有什么顺序,很杂. 1.构造函数通过函数重载的机制可以有多个(不同的构造函数,参数个数,或者参数类型不同.),但是析构函数只能有一个.当没有在代码中写明构造或析构函数时,编译器会自动生成缺省的构造或析构函数.构造函数和析构函数都无返回值.另外,析构函数必须无参数.没写复制(拷贝)构造函数,编译器也会自动生成缺省的复制构造函数.复制构造函数会生成一个临时隐藏的对象,在调用一个以类对象作为参数的函数和调用一

构造函数和析构函数的作用[转]

千万不要把构造函数和析构函数同普通的函数等同起来看待. 给你一段介绍,这个是一位真正的高手的回答,看了你就会明白的.第9章         类的构造函数.析构函数与赋值函数构造函数.析构函数与赋值函数是每个类最基本的函数.它们太普通以致让人容易麻痹大意,其实这些貌似简单的函数就象没有顶盖的下水道那样危险.         每个类只有一个析构函数和一个赋值函数,但可以有多个构造函数(包含一个拷贝构造函数,其它的称为普通构造函数).对于任意一个类A,如果不想编写上述函数,C++编译器将自动为A产生四

C++构造函数与析构函数的解析

创建一个对象时,常常需要作某些初始化的工作,例如对数据成员赋初值. 注意,类的数据成员是不能在声明类时初始化的.如果一个类中所有的成员都是公用的,则可以在定义对象时对数据成员进行初始化.如: class Time { public : //声明为公用成员 hour; minute; sec; }; Time t1={14,56,30}; //将t1初始化为14:56:30 这种情况和结构体变量的初始化是差不多的,在一个花括号内顺序列出各公用数据成员的值,两个值之间用逗号分隔.但是,如果数据成员是

C++ 构造函数和析构函数

构造函数: 作用: 1)分配空间:分配非静态数据成员的存储空间 2)初始化成员:初始化非静态数据成员 分配空间: 1)含有指针变量,需要程序员显式申请空间(使用new申请) 2)非指针变量:由系统自动分配空间 初始化成员: 1)使用赋值语句初始化:一般的变量 2)使用表达式表初始化:一般的变量 +  Const成员,引用成员,对象成员 调用时机:在定义对象的时候,系统自动调用构造函数 1)对象被创建时,自动调用构造函数 Coord p1(1); Coord p2=1;  //此时也会调用构造函数

python中的构造函数和构造函数和析构函数的作用

构造函数和构造函数和析构函数都属于python中的特殊方法 其中的"__del__"就是一个析构函数了,当使用del 删除对象时,会调用他本身的析构函数,另外当对象在某个作用域中调用完毕,在跳出其作用域的同时析构函数也会被调用一次,这样可以用来释放内存空间

.NET 基础 一步步 一幕幕[面向对象之构造函数、析构函数]

构造函数.析构函数 构造函数: 语法: //无参的构造函数 [访问修饰符] 函数名() :函数名必须与类名相同. //有参的构造函数 [访问修饰符] 函数名(参数列表):函数名必须与类名相同. 作用:帮助我们初始化对象(给对象的每个属性依次的赋值) 构造函数是一个特殊的方法: 1).构造函数没有返回值,连void也不能写. 2).构造函数的名称必须跟类名一样. 3).构造函数有无参和有参之分. 创建对象的时候会执行构造函数,构造函数是可以有重载的. *** 类当中会有一个默认的无参数的构造函数,

python中的构造函数和析构函数

python中的特殊方法,其中两个,构造函数和析构函数的作用: 比说“__init__”这个构造函数,具有初始化的作用,也就是当该类被实例化的时候就会执行该函数.那么我们就可以把要先初始化的属性放到这个函数里面.如下程序: 其中的“__del__”就是一个析构函数了,当使用del 删除对象时,会调用他本身的析构函数,另外当对象在某个作用域中调用完毕,在跳出其作用域的同时析构函数也会被调用一次,这样可以用来释放内存空间. 待深入……………………