2 luan55555 luan55555 于 2016.04.20 17:24 提问

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

方法一:
class R{

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

3个回答

NK_test
NK_test   Rxr 2016.04.21 00:02

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

qq423399099
qq423399099   Ds   Rxr 2016.04.20 17:54

方法二的构造函数应该改成

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

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

tianliangcsdn
tianliangcsdn 能说详细点吗?我老是对这两种方法的运用不能理解,困惑好长时间了!还是不能理解 ? 谢谢您
2 年多之前 回复
webcq
webcq   2016.04.21 16:54

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

luan55555
luan55555 大哥 你答非所问呀 能讲解一下吗?
大约 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
main函数的多种写法
int main( int argc, char **argv ) { ......... return 0; } int main( void ) { ......... return 0; }
#include 几种书写方式的区别
#include使用的是旧式c风格,它的实现不包含名称空间#include用的是c++风格,并使用std名称空间,使用这种方法时需要加上using namespace std;或者在调用函数时加上命名空间如: std::cout#include表示头文件是系统自带的,在编译时会到系统指定的include文件夹中去寻找。#include"xxx.h"表示是自定义头文件,编译时会先在当前目
c语言判断语句if(n==1)与if(1==n)的区别
下面是C语言中两种if语句判断方式。请问哪种写法更好?为什么? int n; if (n == 10) // 第一种判断方式 if (10 == n) // 第二种判断方式 首先,看看效率上有没有区别 if (i == 1) 004014CF cmp dword ptr [ebp-4],1
单例模式学习及几种不同写法
单例模式是设计模式中最简单的形式之一。这一模式的目的是使得类的一个对象成为系统中的唯一实例。要实现这一点,可以从客户端对其进行实例化开始。因此需要用一种只允许生成对象类的唯一实例的机制,“阻止”所有想要生成对象的访问。使用工厂方法来限制实例化过程。这个方法应该是静态方法(类方法),因为让类的实例去生成另一个唯一实例毫无意义。 显然单例模式的要点有三个;一是某个类只能有一个实例;二是它必须
php——学习笔记,圆周率的三种书写方法看float用法
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> http://www.w3.org/1999/xhtml"> 无标题文档  echo'圆周率的3种书写方法:';  echo'第一种:pi()='.pi().'';  echo'第二种:3.14159265359='. 3.14159265359.'';
INSERT的两种写法
有朋友问我存储过程中怎么判断后将不同的数据插入到同一张零时表中,如下写法一直报错if(判断) Insert into Table2(field1,field2,...) select value1,value2,... from Table1 else Insert into Table2(field1,field2,...) select value1,value2,... from Table1
冒泡排序的N种写法
第一种写法: #include   using namespace std; void bubbleSort(int arr[], int n) { for (int i = 0; i { int temp = 0; for (int j = i+1; j { if (arr[i] > arr[j]) { temp = arr[i]; arr[i] = ar
javascript立即执行函数的两种写法
两种写法看下面:// 第一种括号写法 (function (m) { console.log(m)})('haha') // 用es5新写法可以: (m => console.log(m))('haha') // 第二种叹号写法 !function (m) {console.log(m)}('haha')既然说到立即执行函数了,那么在唠叨一下闭包。通常用立即执行函数是用在闭包场景下的。for (va
【jQuery】js中一些函数写法的区别
(function($){... ...})(jQuery) 定义了一个匿名函数并调用,调用实参为jQuery。 等价于: var fn = function($){....}; fn(jQuery); (function($){ })(jQuery);用于存放开发插件的代码,执行其中代码时DOM不一定存在,所以直接自动执行DOM操作的代码 请小心使用。 jQuery(functio
java设计模式之单例模式(几种写法及比较)
概念:   java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例、饿汉式单例、登记式单例。   单例模式有以下特点:   1、单例类只能有一个实例。   2、单例类必须自己创建自己的唯一实例。   3、单例类必须给所有其他对象提供这一实例。   单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、