c++下面的两种函数的写法有什么区别?第二种写法为什么不对?应怎么改才对?

问题描述

c++下面的两种函数的写法有什么区别?第二种写法为什么不对?应怎么改才对? 3C
方法一:
class R{

public:
R(int r1int r2):r1(r1)r2(r2){}
void print();
void print()const ;
private:
int r1r2;
};
void R::print(){
cout<<r1<<"":""<<r2<<endl;
}
void R::print() const{
cout<<r1<<"";""<<r2<<endl;
}
int main(){
system(""color 4e"");
R a(54);
a.print();
const R b(2052) ;
b.print();
system(""pause"");
return 0;
}
方法二:
class R{ //常对象及常成员函数 31
public:
R(int r1int r2)
{
r1=r1;
r2=r2;
}
void print();
void print()const ;
private:
int r1r2;
};
void R::print(){
cout<<r1<<"":""<<r2<<endl;
}
void R::print() const{
cout<<r1<<"";""<<r2<<endl;
}
int main(){
system(""color 4e"");
R a(54);
a.print();
const R b(2052) ;
b.print();
system(""pause"");
return 0;
}

解决方案

首先楼上说的是对的,要加this。至于放在构造函数中初始化和使用初始化列表的不同,我们提倡使用初始化列表,有两个原因:
一是初始化和赋值是不一样的,初始化列表只调用构造函数,而另一个却需要再使用拷贝构造函数(赋值操作)
二是像const这种成员只能初始化,不能重新赋值。
综上,建议使用初始化列表

解决方案二:
方法二的构造函数应该改成

 R(int r1int r2)    {        this->r1=r1;        this->r2=r2;    }

你写成r1=r1;编译器会把两个r1都当成形参的r1
这个和初始化参数列表不同

解决方案三:
最好对类成员的命名加一个前缀,如 m_,避免与参数混淆。

时间: 2024-10-29 13:35:45

c++下面的两种函数的写法有什么区别?第二种写法为什么不对?应怎么改才对?的相关文章

select-link中这样两种写法有什么区别?

问题描述 link中这样两种写法有什么区别? var query = from x in table select x; foreach (var item in x) { ... } foreach (var item in table) { ... } 解决方案 两种写法一样,而且性能也一样

ios-(IOS)这两种写法有什么区别???

问题描述 (IOS)这两种写法有什么区别??? 两种写法有一种运行后加载不了数据...第一种:-(NSArray *)messageFrames{ if (_messageFrames == nil) { NSArray *messages = [Message messagesList]; NSMutableArray *temArray =[NSMutableArray array]; for (Message *msg in messages) { MessageFrame *msgfra

指针-opencv学习灰度图锐化的两个函数的差别不理解

问题描述 opencv学习灰度图锐化的两个函数的差别不理解 下面是一个灰度图锐化的函数,我有两种方式实现,方式1,和方式2,居然得到的结果不一样,图片数据也不一样,请高手看一下,可能是C语言的知识掌握的不好. void my_sharpen(const cv::Mat &image, cv::Mat &result) { result.create (image.size(), image.type ()); for(int j=1; j<image.rows-1; j++) { u

javascript两种function的定义介绍及区别说明_javascript技巧

一般情况下两者的调用结果是一样的,但是还是有区别的. 第一种方式: 复制代码 代码如下: function a(){ alert('old'); } var b=a; function a(){ b(); alert('new'); } a();//浏览器就会出现内存溢出的情况 第二种方式: 复制代码 代码如下: function a(){ alert('old'); } var b=a; var a=function(){ b(); alert('new'); } a();//浏览器就会按顺序

VB6.0中For语句的两种用法,如何用第二种用法遍历一个数组?

问题描述 VB6.0中For语句的两种用法,如何用第二种用法遍历一个数组? VB6.0中For语句的两种用法,如何用第二种用法遍历一个数组? 解决方案 正序 for i = lbound(arr) to ubound(arr) arr(i) next 逆序 for i = ubound(arr) to lbound(arr) step -1 arr(i) next 解决方案二: 一个加密解密函数 for vb6.0!VB6.0中的编译预处理--#IF语句

两个ChackA与ChackB函数执行是有啥区别,那种方式更好呢

问题描述 publicboolCheckA(Func<bool>func){if(Role==10)returntrue;if(func!=null)returnfunc();returnfalse;}publicboolCheckB<T>(Tentity,Func<T,bool>func){if(Role==10)returntrue;if(func!=null)returnfunc(entity);returnfalse;}publicvoidEdit(intid=

php中file_get_contents和curl两个函数用法

下面是file_get_contents和curl两个函数同样功能的不同写法 file_get_contents函数的使用示例:    代码如下 复制代码 < ?php $file_contents = file_get_contents('http://www.111cn.net/'); echo $file_contents; ?> 换成curl函数的使用示例:  代码如下 复制代码 < ?php $ch = curl_init(); $timeout = 5; curl_setop

利用函数返回oracle对象表的三种方法_oracle

因为要返回表对象,无论后续用什么方法返回,都先要声明全局type:并且,字段变量类型要为object,不能为record: create or replace type t_test as object( EMPNO NUMBER(4), ENAME VARCHAR2(10), JOB VARCHAR2(9), SAL NUMBER(7,2) ); create or replace type t_test_table as table of t_test; 至于返回表对象的方法,目前发现三种:

ASP在utf8及gb2312下取得汉字拼音首字母两个函数

ASP取得汉字拼音首字母utf8及gb2312下两个函数 以下是UTF-8编码下的函数:function GetPy4utf(char) if char=null or len(trim(char))=0 then exit function dim strCHSfirstPY strCHSfirstPY ="YDYQSXMWZSSXJBYMGCCZQPSSQBYCDSCDQLDYLYBSSJGYZZJJFKCCLZDHWDWZJLJPFYYNWJJTMYHZWZHFLZPPQHGSCYYYNJ