标签:virtual 构造函数 运算符 留空 左值 直接 let iostream rtu
临时对象、
产生临时对象
以传值的方式给函数传递参数、
class a
{
public:
int b1;
int b2;
public:
a(int f1 = 0, int f2 = 0);//声明时需要由默认值
a(const a& c) :b1(c.b1), b2(c.b2)//拷贝构造函数、
{
cout << "拷贝" << endl;
}
virtual ~a()//析构函数
{
cout << "调用了析构函数"<< endl;
}
public:
int e(a d);//普通函数
//int e(a &d);//引用便产生影响
};
a::a(int f1, int f2 ):b1 (f1),b2(f2)//类外实现构造函数、声明时需要由默认值、定义时可以不需要默认值
{
cout<<"调用构造函数"<<endl;
cout << "b1是" <<b1<< endl;
cout << "b2是" << b2 << endl;
}
int a::e(a d)//局部对象、临时对象(特殊的、一般临时对象是不显示代码的、这是假的临时对象?)、临时使用求和、
//int a::e(a &d)//引用便产生影响 30行 左值引用、 直接传值、
{
int q = d.b1 + d.b2;
d.b1 = 100;//赋新值、修改值对外没有影响因为是拷贝出来的、引用有影响、
return q;
}
int main()
{
a g(10, 30);//调用构造函数、
int he = g.e(g);//会导致拷贝构造函数执行、
cout << "合是" << he << endl;
cout << "b1的值" << g.b1 << endl;
类型转换生成的临时对象和隐式类型转换以保证函数调用成功、
C++语言只会为const引用(const string &n)产生临时变量、而不会为非const引用产生临时引用、
#include <iostream>
#include<stdio.h>
#include<string>
#include<string.h>
#include <vector>
using namespace std;
class a
{
public:
int b1;
int b2;
public:
a(int f1 = 0, int f2 = 0);//声明时需要由默认值
a(const a& c) :b1(c.b1), b2(c.b2)//拷贝构造函数、
{
cout << "拷贝" << endl;
}
a& operator=(const a&j)//拷贝赋值运算符
{
b1 = j.b1;
b2 = j.b2;
cout << "调用了拷贝赋值运算符" << endl;
return *this;
}
virtual ~a()//析构函数
{
cout << "调用了析构函数"<< endl;
}
public:
int e(a d);//普通函数
//int e(a &d);//引用便产生影响
};
a::a(int f1, int f2 ):b1 (f1),b2(f2)//类外实现构造函数、声明时需要由默认值、定义时可以不需要默认值
{
cout<<"调用构造函数"<<endl;
cout << "b1是" <<b1<< endl;
cout << "b2是" << b2 << endl;
}
int a::e(a d)//局部对象、临时对象(特殊的、一般临时对象是不显示代码的、这是假的?)、临时使用求和、
//int a::e(a &d)//引用便产生影响 43行 左值引用、 直接传值、
{
int q = d.b1 + d.b2;
d.b1 = 100;//赋新值、修改值对外没有影响因为是拷贝出来的、引用有影响、
return q;
}
//统计字符h在n中出现的次数、将次数返回、
int k(const string &n, char h)//定义了string类型、n的形参绑定到啦string临时对象上、
{
const char* m = n.c_str();
int v = 0;
return v;//执行到此步骤则string临时对象会被销毁
}
int main()
{
//a g;
//g = 100;/*产生了临时对象、将100给了a、
//用100来创建了一个类型为a的临时对象、
//调用拷贝赋值运算符吧临时对象里面的内容赋值给g对象
//销毁创建的临时对象a*/
a g = 200;/*优化56行代码、使其调用一次函数、没有临时对象的生成、g = 200不再是赋值运算符而是定义是初始化、定义时便预留了空间、在g的预留空间中构造200、*/
char r[100] = "qwertyuiopqwertwww";
int t = k(r, ‘w‘);//类型不匹配、char和string类型不匹配、编译器默认构造string类型的临时对象、
/*cout << "合是" << he << endl;
cout << "b1的值" << g.b1 << endl;*/
}
标签:virtual 构造函数 运算符 留空 左值 直接 let iostream rtu
原文地址:https://www.cnblogs.com/chengyaohui/p/13843005.html