string类-向函数传递对象-对象赋值语句-拷贝构造函数
Table of Contents
string类 #
- string类的字符串对象的使用方法与其他对象一样,但必须先定义才可使用
- 定义格式
string str1,str2;
string
str3("china");
等价于
string str3="china";
向函数传递对象 #
使用对象作为函数参数 #
- 向函数传递对象时,是通过"传值调用"传递给函数
- 因此,函数中对对象任何修改均不影响调用该函数对象的本身
#include <iostream>
class Tr{
public:
Tr(int n){
i=n;
}
void set(int n){
i=n;
}
int get(){
return i;
}
private:
int i;
};
void sqr(Tr ob){
ob.set(ob.get()*ob.get());
cout <<"在函数sqr内,形参对象ob的数据成员i的值为"<<ob.get()<<endl;
}
int main(){
Tr obj(10);
cout<<"调用函数sqr前,实参i值为:"<<obj.get()<<endl;
sqr(obj);
cout<<"调用函数sqr后,实参i值为:"<<obj.get()<<endl;
return 0;
}
output: 调用函数sqr前,实参i值为:10 在函数sqr内,形参对象ob的数据成员i的值为100 调用函数sqr后,实参i的值为:10
使用对象指针作为函数参数 #
- 使用对象指针作为函数参数可以实现"传址调用",即可在被调用函数中改变调用函数的参数对象的值
#include <iostream>
class Tr{
public:
Tr(int n){
i=n;
}
void set(int n){
i=n;
}
int get(){
return i;
}
private:
int i;
};
void sqr(Tr *ob){
ob->set(ob->get()*ob->get());
cout <<"在函数sqr内,形参对象ob的数据成员i的值为"<<ob->get()<<endl;
}
int main(){
Tr obj(10);
cout<<"调用函数sqr前,实参i值为:"<<obj.get()<<endl;
sqr(obj);
cout<<"调用函数sqr后,实参i值为:"<<obj.get()<<endl;
return 0;
}
output: 调用函数sqr前,实参i值为:10 在函数sqr内,形参对象ob的数据成员i的值为100 调用函数sqr后,实参i的值为:100
使用对象引用作为函数参数 #
- 使用对象引用作为函数参数实现的也是"传址调用",但比对象指针更简单,更直接,建议使用引用
#include <iostream>
class Tr{
public:
Tr(int n){
i=n;
}
void set(int n){
i=n;
}
int get(){
return i;
}
private:
int i;
};
void sqr(Tr &ob){
ob.set(ob.get()*ob.get());
cout <<"在函数sqr内,形参对象ob的数据成员i的值为"<<ob.get()<<endl;
}
int main(){
Tr obj(10);
cout<<"调用函数sqr前,实参i值为:"<<obj.get()<<endl;
sqr(obj);
cout<<"调用函数sqr后,实参i值为:"<<obj.get()<<endl;
return 0;
}
output: 调用函数sqr前,实参i值为:10 在函数sqr内,形参对象ob的数据成员i的值为100 调用函数sqr后,实参i的值为:100
对象赋值语句 #
- A和B是同一类的两个对象,那么下述对象赋值语句,就能把对象A的数据成员的值逐位复制给对象B
B=A;
拷贝构造函数 #
调用拷贝构造函数的形式 #
- 代入法
类名 对象2(对象1)
如: Point p2(p1);
- 赋值法
对象2=对象1;
如:Point p2=p1;
缺省拷贝构造函数 #
- 如果没有编写自定义的拷贝构造函数,C P P会自动地将一个已存在的对象复制给新对象
- 这种按成员逐一复制的过程是由缺省拷贝构造函数自动完成的
调用构造函数的3种情况 #
- 当用类的一个对象去初始化该类的另一个对象时,拷贝构造函数将会被调用
如:
Point p2(p1);
Point p2=p1;
- 当函数的形参是类的对象,在调用函数进行形参和实参结合时,拷贝函数将会被调用
void fun1(Point p)
{
p.print();
}
int main()
{
Point p1(10,20);
fun1(p1);
return 0;
}
- 当函数的返回值是类的对象,在函数调用完毕将返回值(对象)带回函数调用处时,此时就会调用拷贝构造函数,将此对象复制给一个临时对象并传到该函数的调用处
Point fun2()
{
Point p1(10,30);
return p1;
}
int main()
{
Point p2;
p2 = fun2();
return 0;
}