类的构造函数、析构函数与赋值函数

构造函数、析构函数与赋值函数是每个类最基本的函数。它们太普通以致让人容易 麻痹大意,其实这些貌似简单的函数就象没有顶盖的下水道那样危险。

每个类只有一个析构函数和一个赋值函数,但可以有多个构造函数(包含一个拷贝 构造函数,其它的称为普通构造函数)。对于任意一个类 A,如果不想编写上述函数, C++编译器将自动为 A 产生四个缺省的函数。

 1 #include <iostream>
 2
 3 /* run this program using the console pauser or add your own getch, system("pause") or input loop */
 4 using namespace std;
 5 int main(int argc, char** argv) {
 6         //定义date结构
 7     struct date
 8     {
 9        int year;
10        int month;
11        int day;
12     };
13
14     //定义baby结构
15     struct baby {
16         int    num;
17         float   weight;
18         date   birthday;   // date为结构类型
19     };
20
21     //声明baby结构变量并初始化
22     baby b1={10001,10,{2002,12,25}};
23
24     //下列是baby结构变量b1的引用。
25     cout<<"b1.num="<<b1.num<<endl;
26     cout<<"b1.weight="<<b1.weight<<endl;
27     cout<<"b1.birthday.year="<<b1.birthday.year<<endl;
28     cout<<"b1.birthday.month="<<b1.birthday.month<<endl;
29     cout<<"b1.birthday.day="<<b1.birthday.day<<endl;
30     cout<<"--------------------------"<<endl;
31
32     //声明baby结构变量temp,并进行赋值运算
33     baby temp;
34     temp=b1;
35     cout<<"temp.num="<<temp.num<<endl;
36     cout<<"temp.weight="<<temp.weight<<endl;
37     cout<<"temp.birthday.year="<<temp.birthday.year<<endl;
38     cout<<"temp.birthday.month="<<temp.birthday.month<<endl;
39     cout<<"temp.birthday.day="<<temp.birthday.day<<endl;
40     return 0;
41 }

原文地址:https://www.cnblogs.com/borter/p/9406537.html

时间: 2024-08-27 14:37:43

类的构造函数、析构函数与赋值函数的相关文章

编写类String 的构造函数、析构函数和赋值函数

编写类String 的构造函数.析构函数和赋值函数,已知类String 的原型为:class String{public:String(const char *str = NULL); // 普通构造函数String(const String &other); // 拷贝构造函数~ String(void); // 析构函数String & operate =(const String &other); // 赋值函数private:char *m_data; // 用于保存字符串

【编程题】编写String类的构造函数、拷贝构造函数、析构函数和赋值函数

[编程题]编写String类的构造函数.拷贝构造函数.析构函数和赋值函数 [题目]:请编写如下4个函数 1 class String 2 { 3 public: 4 String(const char *str = NULL);// 普通构造函数 5 String(const String &other); // 拷贝构造函数 6 ~ String(void); // 析构函数 7 String & operate =(const String &other);// 赋值函数 8

C++反汇编第一讲,认识构造函数,析构函数,以及成员函数

C++反汇编第一讲,认识构造函数,析构函数,以及成员函数 以前说过在C系列下的汇编,怎么认识函数.那么现在是C++了,隐含有构造和析构函数 一丶认识构造函数 高级代码: class MyTest { public: MyTest(); ~MyTest(); public: DWORD m_dwTest; }; MyTest::MyTest() { printf("1111\r\n"); //构造的时候先打印 } MyTest::~MyTest() { printf("2222

移动构造函数和移动赋值函数

在一个类的内部同时实现常规拷贝构造函数和移动拷贝构造函数,常规赋值函数和移动赋值函数.调用时若参数为一个左值,则调用常规函数:若参数为一个右值,则调用移动函数.也可调用"std::move"强行调用移动函数. #include <iostream> #include <utility> using std::cout; using std::endl; class Useless { private:     int n;          // number 

类String的构造函数(包含一个拷贝构造函数)、析构函数和赋值函数

每个类只有一个析构函数和一个赋值函数,但可以有多个构造函数(包含一个拷贝构造函数,其它的称为普通构造函数). class String { public: String(const char *str = NULL); // 普通构造函数 String(const String &other); // 拷贝构造函数 ~ String(void); // 析构函数 String & operate =(const String &other); // 赋值函数 // 相加函数,如果没

含有指针变量的类需要重写拷贝构造函数,拷贝赋值函数,析构函数

编译器自带拷贝构造(ctor)和拷贝赋值函数(operator =), 但是对于成员变量含有指针的类,其不能使用默认的拷贝赋值函数.因为使用默认的,会直接将指针指向的地址进行赋值 (浅拷贝,共享内存,共指一个对象),而不是分配一块内存,具有相同的数值 (深拷贝,独立,两个对象). 浅拷贝容易造成dangling pointer. 用一个例子来展示: 1 #ifndef __MYSTRING__ 2 #define __MYSTRING__ 3 4 class String{ 5 public:

C++类的构造函数不能为虚函数的原因

C++类的对象构造的时候,首先申请一片内存,然后调用构造函数进行初始化: 我们知道,存在虚函数的话,也会存在一个虚函数表vtable,而虚函数表示在什么时候产生的呢,当然是在调用构造函数之后产生的: 那么问题来了,如果构造函数为虚函数,此时的内存是一片空白,不存在该虚函数表vtable,那么无法找到该构造函数: 所以说,构造函数不能为虚函数. 对于析构函数而言,可以为虚函数,因为此时虚函数表早已建立:并且,常常析构函数都是虚函数.原因就是,通过基类指针在销毁对象的时候,可以正确的识别要销毁对象的

CPP_类默认函数:构造函数,拷贝构造函数,赋值函数和析构函数

类默认函数:构造函数,拷贝构造函数,赋值函数和析构函数 class Person{ public : Person():age(10), name(NULL); Person(int myage, char *myname); Person(const Person &a); ~Person(void); void set_age(int myage); void get_age(void); void set_other_age(Person &a, int b); private: i

复制构造函数 与 赋值函数 的区别(转)

转自:jihite 构造函数.析构函数.赋值函数是每个类最基本的的函数.每个类只有一个析构函数和一个赋值函数.但是有很多构造函数(一个为复制构造函数,其他为普通构造函数.对于一个类A,如果不编写上述四个函数,c++编译器将自动为A产生四个默认的函数,即: A(void)                                    //默认无参数构造函数 A(const A &a)                         //默认复制构造函数 ~A(void);