求解答!类的友元函数+复数类中的运算符重载 +类模版出问题

有人跟我一样懒 2014-04-16 11:47:06
/*
* Copyright (c) 2014, 烟台大学计算机学院
* All rights reserved.
* 作 者:王颖
* 完成日期:2014 年 4 月 14 日
* 版 本 号:v1.0
* 输入描述: 无
* 问题描述:类的友元函数+复数类中的运算符重载+类模版
* 请用类的成员函数,定义复数类重载运算符+、-、*、/,使之能用于复数的加减乘除
* 程序输出:略
* 问题分析:略
* 算法设计:略
*/
#include <iostream>

using namespace std;
template <class numtype>
class Complex
{
public:
Complex(){real=0;imag=0;}
Complex(numtype r,numtype i){real=r; imag=i;}
friend Complex<numtype> operator+(Complex<numtype>&,Complex<numtype>&);
friend Complex<numtype> operator-(Complex<numtype>&,Complex<numtype>&);
friend Complex<numtype> operator*(Complex<numtype>&,Complex<numtype>&);
friend Complex<numtype> operator/(Complex<numtype>&,Complex<numtype>&);
void display()
{
cout<<"("<<real<<","<<imag<<")"<<endl;
}
private:
numtype real;
numtype imag;
};
//下面定义成员函数
template <class numtype>
Complex<numtype> operator+(Complex<numtype> &c2,Complex<numtype>&t)
{
Complex<numtype> mm;
mm.imag=t.real+c2.real;
mm.real=t.imag+c2.imag;
return mm;
}
template <class numtype>
Complex<numtype> operator-(Complex<numtype> &c2,Complex<numtype>&t)
{
return Complex<numtype>(c2.real-t.real,c2.imag-t.imag);
}
template <class numtype>
Complex<numtype> operator*(Complex<numtype> &c2,Complex<numtype> &t)
{
return Complex<numtype>(t.real*c2.real,t.imag*c2.imag);
}
template <class numtype>
Complex<numtype> operator/(Complex<numtype> &c2,Complex<numtype> &t)
{
return Complex<numtype>(c2.real/t.real,c2.imag/t.imag);
}
//下面定义用于测试的main()函数
int main()
{
Complex<int> c1(3,4),c2(5,-10),c3(0,0);
Complex<double> c4(2.5,6.6),c5(5.5,9.9),c6;
cout<<"c1=";

c1.display();
cout<<"c2=";
c2.display();
c3=c1+c2;
cout<<"c1+c2=";
c3.display();
c3=c1-c2;
cout<<"c1-c2=";
c3.display();
c3=c1*c2;
cout<<"c1*c2=";
c3.display();
c3=c1/c2;
cout<<"c1/c2=";
c3.display();
cout<<"c4=";
c3.display();
cout<<"c5=";
c3.display();
c6=c4+c5;
cout<<"c4+c5=";
c3.display();
c6=c4-c5;
cout<<"c4-c5=";
c3.display();
c6=c4*c5;
cout<<"c4*c5=";
c3.display();
c6=c4/c5;
cout<<"c4/c5=";
c3.display();
return 0;
}


想用:类的友元函数+复数类中的运算符重载+类模版。用类的友元函数+复数类中的运算符重载 的时候还没有错。用了模版就错了一堆。找不到原因。。。求解答啊,谢谢各位大神呀!
...全文
249 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 7 楼 ri_aje 的回复:
[quote=引用 5 楼 u012451600 的回复:] [quote=引用 3 楼 ri_aje 的回复:] [quote=引用 2 楼 u012451600 的回复:] [quote=引用 1 楼 ri_aje 的回复:] 把 friend 的定义直接写在类内部就行了。否则就得先声明函数模板,然后再 friend 特化,很麻烦。
我把friend的定义直接写在内部了。但是还是很多错误啊呀?是不是还有其他的限制?[/quote] 把新代码上来。[/quote]
引用 3 楼 ri_aje 的回复:
[quote=引用 2 楼 u012451600 的回复:] [quote=引用 1 楼 ri_aje 的回复:] 把 friend 的定义直接写在类内部就行了。否则就得先声明函数模板,然后再 friend 特化,很麻烦。
我把friend的定义直接写在内部了。但是还是很多错误啊呀?是不是还有其他的限制?[/quote] 把新代码上来。[/quote]
引用 3 楼 ri_aje 的回复:
[quote=引用 2 楼 u012451600 的回复:] [quote=引用 1 楼 ri_aje 的回复:] 把 friend 的定义直接写在类内部就行了。否则就得先声明函数模板,然后再 friend 特化,很麻烦。
我把friend的定义直接写在内部了。但是还是很多错误啊呀?是不是还有其他的限制?[/quote] 把新代码上来。[/quote]
/*
* Copyright (c) 2014, 烟台大学计算机学院
* All rights reserved.
* 作    者:王颖
* 完成日期:2014 年 4 月 14 日
* 版 本 号:v1.0
* 输入描述: 无
* 问题描述:类的友元函数+复数类中的运算符重载+类模版
* 请用类的成员函数,定义复数类重载运算符+、-、*、/,使之能用于复数的加减乘除
* 程序输出:略
* 问题分析:略
* 算法设计:略
*/
#include <iostream>

using namespace std;
template <class numtype>
class Complex
{
public:
    Complex()
    {
        real=0;
        imag=0;
    }
    Complex(numtype r,numtype i)
    {
        real=r;
        imag=i;
    }
    friend Complex<numtype> operator+(Complex<numtype>&c2,Complex<numtype>&t)
    {
        Complex<numtype> mm;
        mm.imag=t.real+c2.real;
        mm.real=t.imag+c2.imag;
        return mm;
    }
    friend Complex<numtype> operator-(Complex<numtype>&c2,Complex<numtype>&t)
    {
        return Complex<numtype>(c2.real-real,c2.imag-imag);
    }
    friend Complex<numtype> operator*(Complex<numtype>&c2,Complex<numtype>&t)
    {
        return Complex<numtype>(t.real*c2.real,t.imag*c2.imag);
    }
    friend Complex<numtype> operator/(Complex<numtype>&c2,Complex<numtype>&t)
    {
        return Complex<numtype>(c2.real/t.real,c2.imag/t.imag);
    }
    void display()
    {
        cout<<"("<<real<<","<<imag<<")"<<endl;
    }
private:
    numtype real;
    numtype imag;
};
//下面定义用于测试的main()函数
int main()
{
    Complex<int> c1(3,4),c2(5,-10),c3(0,0);
    Complex<double> c4(2.5,6.6),c5(5.5,9.9),c6;
    cout<<"c1=";

    c1.display();
    cout<<"c2=";
    c2.display();
    c3=c1+c2;
    cout<<"c1+c2=";
    c3.display();
    c3=c1-c2;
    cout<<"c1-c2=";
    c3.display();
    c3=c1*c2;
    cout<<"c1*c2=";
    c3.display();
    c3=c1/c2;
    cout<<"c1/c2=";
    c3.display();
    cout<<"c4=";
    c3.display();
    cout<<"c5=";
    c3.display();
    c6=c4+c5;
    cout<<"c4+c5=";
    c3.display();
    c6=c4-c5;
    cout<<"c4-c5=";
    c3.display();
    c6=c4*c5;
    cout<<"c4*c5=";
    c3.display();
    c6=c4/c5;
    cout<<"c4/c5=";
    c3.display();
    return 0;
}
[/quote] 试了一下,这句

        return Complex<numtype>(c2.real-real,c2.imag-imag);
改成这样就好了。

        return Complex<numtype>(c2.real-t.real,c2.imag-t.imag);
[/quote]最近一直忙的没时间上网,刚看到回复,我按照您的改了改,没有错误和警告了。很谢谢您!
果冻虾仁 2014-04-21
  • 打赏
  • 举报
回复
额,我感觉+ - * / 运算符是没必要用友元的。比如两个复数对象 a和b。a+b 实际上就是在调用一个成员函数。不使用友元直接重载加号运算符
Complex<numtype>& operator+(Complex<numtype>&,Complex<numtype>&);
注意返回值那里加了引用。不需要友元。a+b。实际就是可以理解为调用 a.operator+ 这个方法而已。 只有跟输入输出有关的<< 和>>需要使用友元 。因为不是复数对象在调用,而是输出流对象在调用。比如你重载<< cout<<a那么就是在执行cout.operator<<方法
mujiok2003 2014-04-21
  • 打赏
  • 举报
回复
ri_aje 2014-04-20
  • 打赏
  • 举报
回复
引用 5 楼 u012451600 的回复:
[quote=引用 3 楼 ri_aje 的回复:] [quote=引用 2 楼 u012451600 的回复:] [quote=引用 1 楼 ri_aje 的回复:] 把 friend 的定义直接写在类内部就行了。否则就得先声明函数模板,然后再 friend 特化,很麻烦。
我把friend的定义直接写在内部了。但是还是很多错误啊呀?是不是还有其他的限制?[/quote] 把新代码上来。[/quote]
引用 3 楼 ri_aje 的回复:
[quote=引用 2 楼 u012451600 的回复:] [quote=引用 1 楼 ri_aje 的回复:] 把 friend 的定义直接写在类内部就行了。否则就得先声明函数模板,然后再 friend 特化,很麻烦。
我把friend的定义直接写在内部了。但是还是很多错误啊呀?是不是还有其他的限制?[/quote] 把新代码上来。[/quote]
引用 3 楼 ri_aje 的回复:
[quote=引用 2 楼 u012451600 的回复:] [quote=引用 1 楼 ri_aje 的回复:] 把 friend 的定义直接写在类内部就行了。否则就得先声明函数模板,然后再 friend 特化,很麻烦。
我把friend的定义直接写在内部了。但是还是很多错误啊呀?是不是还有其他的限制?[/quote] 把新代码上来。[/quote]
/*
* Copyright (c) 2014, 烟台大学计算机学院
* All rights reserved.
* 作    者:王颖
* 完成日期:2014 年 4 月 14 日
* 版 本 号:v1.0
* 输入描述: 无
* 问题描述:类的友元函数+复数类中的运算符重载+类模版
* 请用类的成员函数,定义复数类重载运算符+、-、*、/,使之能用于复数的加减乘除
* 程序输出:略
* 问题分析:略
* 算法设计:略
*/
#include <iostream>

using namespace std;
template <class numtype>
class Complex
{
public:
    Complex()
    {
        real=0;
        imag=0;
    }
    Complex(numtype r,numtype i)
    {
        real=r;
        imag=i;
    }
    friend Complex<numtype> operator+(Complex<numtype>&c2,Complex<numtype>&t)
    {
        Complex<numtype> mm;
        mm.imag=t.real+c2.real;
        mm.real=t.imag+c2.imag;
        return mm;
    }
    friend Complex<numtype> operator-(Complex<numtype>&c2,Complex<numtype>&t)
    {
        return Complex<numtype>(c2.real-real,c2.imag-imag);
    }
    friend Complex<numtype> operator*(Complex<numtype>&c2,Complex<numtype>&t)
    {
        return Complex<numtype>(t.real*c2.real,t.imag*c2.imag);
    }
    friend Complex<numtype> operator/(Complex<numtype>&c2,Complex<numtype>&t)
    {
        return Complex<numtype>(c2.real/t.real,c2.imag/t.imag);
    }
    void display()
    {
        cout<<"("<<real<<","<<imag<<")"<<endl;
    }
private:
    numtype real;
    numtype imag;
};
//下面定义用于测试的main()函数
int main()
{
    Complex<int> c1(3,4),c2(5,-10),c3(0,0);
    Complex<double> c4(2.5,6.6),c5(5.5,9.9),c6;
    cout<<"c1=";

    c1.display();
    cout<<"c2=";
    c2.display();
    c3=c1+c2;
    cout<<"c1+c2=";
    c3.display();
    c3=c1-c2;
    cout<<"c1-c2=";
    c3.display();
    c3=c1*c2;
    cout<<"c1*c2=";
    c3.display();
    c3=c1/c2;
    cout<<"c1/c2=";
    c3.display();
    cout<<"c4=";
    c3.display();
    cout<<"c5=";
    c3.display();
    c6=c4+c5;
    cout<<"c4+c5=";
    c3.display();
    c6=c4-c5;
    cout<<"c4-c5=";
    c3.display();
    c6=c4*c5;
    cout<<"c4*c5=";
    c3.display();
    c6=c4/c5;
    cout<<"c4/c5=";
    c3.display();
    return 0;
}
[/quote] 试了一下,这句

        return Complex<numtype>(c2.real-real,c2.imag-imag);
改成这样就好了。

        return Complex<numtype>(c2.real-t.real,c2.imag-t.imag);
ri_aje 2014-04-19
  • 打赏
  • 举报
回复
引用 2 楼 u012451600 的回复:
[quote=引用 1 楼 ri_aje 的回复:] 把 friend 的定义直接写在类内部就行了。否则就得先声明函数模板,然后再 friend 特化,很麻烦。
我把friend的定义直接写在内部了。但是还是很多错误啊呀?是不是还有其他的限制?[/quote] 把新代码上来。
火头军 2014-04-19
  • 打赏
  • 举报
回复
模板类的运算符重载不要用类内friend,类外实现,因为类外会和全局模板函数冲突,编译器会认为你的friend没有实现。最好用成员函数
  • 打赏
  • 举报
回复
引用 4 楼 liu111qiang88 的回复:
模板类的运算符重载不要用类内friend,类外实现,因为类外会和全局模板函数冲突,编译器会认为你的friend没有实现。最好用成员函数
哦哦,这样啊。谢谢了
  • 打赏
  • 举报
回复
引用 3 楼 ri_aje 的回复:
[quote=引用 2 楼 u012451600 的回复:] [quote=引用 1 楼 ri_aje 的回复:] 把 friend 的定义直接写在类内部就行了。否则就得先声明函数模板,然后再 friend 特化,很麻烦。
我把friend的定义直接写在内部了。但是还是很多错误啊呀?是不是还有其他的限制?[/quote] 把新代码上来。[/quote]
引用 3 楼 ri_aje 的回复:
[quote=引用 2 楼 u012451600 的回复:] [quote=引用 1 楼 ri_aje 的回复:] 把 friend 的定义直接写在类内部就行了。否则就得先声明函数模板,然后再 friend 特化,很麻烦。
我把friend的定义直接写在内部了。但是还是很多错误啊呀?是不是还有其他的限制?[/quote] 把新代码上来。[/quote]
引用 3 楼 ri_aje 的回复:
[quote=引用 2 楼 u012451600 的回复:] [quote=引用 1 楼 ri_aje 的回复:] 把 friend 的定义直接写在类内部就行了。否则就得先声明函数模板,然后再 friend 特化,很麻烦。
我把friend的定义直接写在内部了。但是还是很多错误啊呀?是不是还有其他的限制?[/quote] 把新代码上来。[/quote]
/*
* Copyright (c) 2014, 烟台大学计算机学院
* All rights reserved.
* 作    者:王颖
* 完成日期:2014 年 4 月 14 日
* 版 本 号:v1.0
* 输入描述: 无
* 问题描述:类的友元函数+复数类中的运算符重载+类模版
* 请用类的成员函数,定义复数类重载运算符+、-、*、/,使之能用于复数的加减乘除
* 程序输出:略
* 问题分析:略
* 算法设计:略
*/
#include <iostream>

using namespace std;
template <class numtype>
class Complex
{
public:
    Complex()
    {
        real=0;
        imag=0;
    }
    Complex(numtype r,numtype i)
    {
        real=r;
        imag=i;
    }
    friend Complex<numtype> operator+(Complex<numtype>&c2,Complex<numtype>&t)
    {
        Complex<numtype> mm;
        mm.imag=t.real+c2.real;
        mm.real=t.imag+c2.imag;
        return mm;
    }
    friend Complex<numtype> operator-(Complex<numtype>&c2,Complex<numtype>&t)
    {
        return Complex<numtype>(c2.real-real,c2.imag-imag);
    }
    friend Complex<numtype> operator*(Complex<numtype>&c2,Complex<numtype>&t)
    {
        return Complex<numtype>(t.real*c2.real,t.imag*c2.imag);
    }
    friend Complex<numtype> operator/(Complex<numtype>&c2,Complex<numtype>&t)
    {
        return Complex<numtype>(c2.real/t.real,c2.imag/t.imag);
    }
    void display()
    {
        cout<<"("<<real<<","<<imag<<")"<<endl;
    }
private:
    numtype real;
    numtype imag;
};
//下面定义用于测试的main()函数
int main()
{
    Complex<int> c1(3,4),c2(5,-10),c3(0,0);
    Complex<double> c4(2.5,6.6),c5(5.5,9.9),c6;
    cout<<"c1=";

    c1.display();
    cout<<"c2=";
    c2.display();
    c3=c1+c2;
    cout<<"c1+c2=";
    c3.display();
    c3=c1-c2;
    cout<<"c1-c2=";
    c3.display();
    c3=c1*c2;
    cout<<"c1*c2=";
    c3.display();
    c3=c1/c2;
    cout<<"c1/c2=";
    c3.display();
    cout<<"c4=";
    c3.display();
    cout<<"c5=";
    c3.display();
    c6=c4+c5;
    cout<<"c4+c5=";
    c3.display();
    c6=c4-c5;
    cout<<"c4-c5=";
    c3.display();
    c6=c4*c5;
    cout<<"c4*c5=";
    c3.display();
    c6=c4/c5;
    cout<<"c4/c5=";
    c3.display();
    return 0;
}
  • 打赏
  • 举报
回复
引用 1 楼 ri_aje 的回复:
把 friend 的定义直接写在类内部就行了。否则就得先声明函数模板,然后再 friend 特化,很麻烦。
我把friend的定义直接写在内部了。但是还是很多错误啊呀?是不是还有其他的限制?
ri_aje 2014-04-17
  • 打赏
  • 举报
回复
把 friend 的定义直接写在类内部就行了。否则就得先声明函数模板,然后再 friend 特化,很麻烦。
《面向对象程序设计》试题 一、单选题(每空2分,共40分) 1、关于C++与C语言关系的描述,( )是错误的。 A.C语言是C++语言的一个子集 B.C语言与C++语言是兼容的 C.C++语言对C语言进行了一些改进 D.C++语言和C语言都是面向对象的 2、已知:int m=10; 下列表示引用的方法,( )是正确的。 A.int& x=m; B.int& y=10; C.int& z; D.float& t=&m; 3、考虑下面的函数原型声明: void DefPar(int a, int b=7, char z = '*'); 下面函数调用,不合法的是( )。 A.DefPar(5); B.DefPar(5,8); C.DefPar(5,'#'); D.DefPar(0,0,'*'); 4、系统在调用重载函数时往往根据一些条件确定哪个重载函数被调用,在下列选项,不能作为依据的是( )。 A.函数的返回值型 B.参数的型 C.函数名称 D.参数个数 5、下列有关C++的说法,不正确的是( )。 A.是一种用户自定义的数据型 B.只有的成员函数或友元函数才能存取的私有成员 C.在,如果不做特别说明,所有成员的访问权限均为私有的 D.在,如果不做特别说明,所有成员的访问权限均为公用的 6、已知X,则当程序执行到语句X array[3];时,调用了( )次构造函数。 A.0 B.1 C.2 D.3 7、有关析构函数的说法,不正确的是( )。 A.析构函数有且仅有一个 B.析构函数和构造函数一样可以有形参 C.析构函数的功能是在系统释放对象之前作一些内存清理工作 D.析构函数无任何函数型 8、定义的内容允许被其对象无限制地存取的是( )。 A.private 部分 B. protected 部分 C.public 部分 D.以上都不对 9、关于常数据成员的说法,不正确的是( )。 A.常数据成员的定义形式与一般常变量的,只不过常数据成员的定义必须现在 B.常数据成员必须进行初始化,并且不能被更新 C.常数据成员通过构造函数的成员初始化列表进行初始化 D.常数据成员可以在定义时直接初始化 10、运用运算符delete删除一个动态对象时( )。 A.系统首先为该动态对象调用构造函数,再释放其占用的内存 B.系统首先释放该动态对象占用的内存,再为其调用构造函数 C.系统首先为该动态对象调用析构函数,再释放其占用的内存 D.系统首先释放动态对象占用的内存,再为其调用析构函数 11、可在外用p.a的形式访问派生对象 p的基成员a,其a是( )。 A.私有继承的公用成员 B.公用继承的私有成员 C.公用继承的保护成员 D.公用继承的公用成员 12、在公用继承方式下,有关派生对象和基对象的关系,不正确的叙述是(  )。 A.派生的对象可以赋给基的对象 B.派生的对象可以初始化基的引用 C.派生的对象可以直接访问基的成员 D.派生的对象的地址可以赋给指向基的指针 13、设置虚基的目的是( )。 A.简化程序 B.消除二义性 C.提高运行效率 D.减少目标代码 14、在C++,用于实现动态多态性的是( )。 A.内联函数 B.重载函数 C.模板函数 D.虚函数 15、不能说明为虚函数的是( )。 A.析构函数 B.构造函数 C.的成员函数 D.以上都不对 16、如果一个至少有一个纯虚函数,那么就称该为( )。 A.抽象 B.派生 C.纯基 D.以上都不对 17、下面关于友元的描述,错误的是( )。 A.友元函数可以访问该的私有数据成员 B.一个的友元的成员函数都是这个友元函数 C.友元可以提高程序的运行效率 D.之间的友元关系可以继承 18、下列运算符,( )运算符在C++不能被重载。 A.&& B.[ ] C.:: D.new 19、模板的使用实际上是将模板实例化成一个( )。 A.函数 B.对象 C. D.抽象 20、假定MyClass为一个,则该的拷贝构造函数的声明语句为( )。 A.MyClass(MyClass x) B.MyClass&(MyClass x) C.MyClass(MyClass &x) D.MyClass(MyClass *x) 二、填空题(前16个空,每空1分,后2个空,每空2分,共20分) 1、和对象的关系可表述为:是对象的 ,而对象则是的 。 2、在C++,三种继承方式的说明符号为 、 和 ,如果不加说明,则默认的继承方式为 。 3、如果只想保留公共基的一个复制,就必须使用关键字 把这个公共基声明为虚基。 4、若要把void fun( )定义为A的友元函数,则应在A的定义加入语句 。 5、的静态成员分为 和 。 6、运算符重载要求保持其原来的操作数个数、 、 和语法结构。 7、通过关键字 可以声明模板,通过关键字 指定函数模板的型参数,有几个型参数就有几个型关键字。 8、列C++两种用户自定义的数据型: 、 。 9、构造函数的作用是 。 10、后置自增运算符“++”重载为的成员函数(设名为A)的形式为 。 三、阅读下面3个程序,写程序运行时输的结果:(共13分) 1、#include using namespace std; void fun(int &a,int &b) { int p; p=a; a=b; b=p; } void exchange(int &a,int &b,int &c) { if(a using namespace std; class A { public: A() { cout<<"constructing A "<复数Complex的声明如下: class Complex { public: Complex(); Complex(double); Complex(double, double); friend Complex operator + (Complex&, Complex&); friend ostream & operator << (ostream&, Complex&); friend istream& operator >> (istream&, Complex&); private: double real, imag; }; 要求: (1)写的所有构造函数的外定义代码。 (2)写对运算符“+”、“<<”、“>>”进行重载的运算符重载函数的定义。 2、(17分)下列Base是一个表示形状的抽象,area( )为求图形面积的函数,total( )则是一个通用的用以求不同形状的图形面积总和的函数。 class Base { public: virtual double area()=0; }; double total(Base *s[ ], int n) { double sum=0.0; for(int i=0; iarea( ); return sum; } 要求: (1)从Base派生圆(Circle)、正方形(Square),圆新增数据成员半径(radius),正方形新增数据成员边长(a),圆和正方形都有构造函数,修改、显示数据成员值的函数,求面积函数。 (2)写main( )函数,计算半径为5.5的圆和边长为9.9的正方形的面积和(必须通过调用total函数计算)。
这是DS小龙哥编写整理的C++入门指南PDF文档,适合C++初学者,C语言转C++工程师当做入门工具书学习。PDF里有完整示例、知识讲解,平时开发都可以复制粘贴,非常便捷。 目前一共写了7章,后续会持续更新资源包,更新后重新下载即可。 这是目前书籍的目录: C++入门指南 1 一、 C++语言基本介绍与开发环境搭建 1 1.1 C++简介 1 1.2 面向对象编程 1 1.3 Windows系统下搭建C++学习环境 2 二、C++基础入门 16 2.1 C++和对象 17 2.2 C++命名空间 18 2.3 std标准命名空间 20 2.4 C++新增的标准输入输方法(cin和cout) 22 2.5 C++规定的变量定义位置 24 2.6 C++新增的布尔型(bool) 24 2.7 C++ 新增的new和delete运算符 25 2.8 C++函数的默认参数(缺省参数) 26 2.9 C++函数重载详解 28 2.10 C++新增的引用语法 30 三、 C++面向对象:和对象 34 3.1 的定义和对象的创建 34 3.2 的成员变量和成员函数 36 3.3 成员的访问权限以及的封装 38 3.4 C++的构造函数与析构函数 39 3.5 对象数组 47 3.6 this指针 50 3.7 static静态成员变量 52 3.8 static静态成员函数 53 3.9 const成员变量和成员函数 55 3.10 const对象(常对象) 56 3.11 友元函数和友元 58 3.11.3 友元 61 3.12 C++字符串 62 四、C++面向对象:继承与派生 75 4.1 继承与派生概念介绍 75 4.2 继承的语法介绍 75 4.3 继承方式介绍(继承的权限) 76 4.4 继承时变量与函数名字遮蔽问题 79 4.5 基和派生的构造函数 82 4.6 基和派生的析构函数 83 4.7 多继承 85 4.8 虚继承和虚基 88 五、C++多态与抽象 91 5.1 多态概念介绍 91 5.2 虚函数 92 5.3 纯虚函数和抽象 95 六、C++运算符重载 97 6.1 运算符重载语法介绍 97 6.2 可重载运算符与不可重载运算符 98 6.3 一元运算符重载 99 6.4 二元运算符重载 102 6.5 关系运算符重载 104 6.6 输入/输运算符重载(>>、<<) 105 6.7 函数调用运算符 () 重载 106 6.8 重载[ ](下标运算符) 107 七、C++模板和泛型程序设计 108 7.1 函数模板 108 7.2 模板 110
关于的下列描述,错误的是( )。
是一组对象的模板
是抽象数据的实现
是数据和方法的封装体
是对象的实例
~D
关于对象的下列描述,错误的是( )。
对象是一种
对象是的一个实例
对象是客观世界的一种实体
对象之间是通过消息进行通信的
~A
下列关于继承的描述,正确的是( )。
继承不是之间的一种关系
C++语言仅支持单一继承
继承会增加程序的冗余性
继承是面向对象方法一个很重要的特性
~D
关于的定义的描述错误的是( )。
的定义格式分为说明部分和实现部分
一般包含有成员函数和数据成员
成员有3种访问权限
成员函数都是公有的,数据成员都是私有的
~D
关于成员函数的描述,错误的是( )。
可以说明一个或多个成员函数
的成员函数只能定义在体外
定义在体外的成员函数前加inline可成为内联函数
体外定义成员函数时,需用名和作用域运算符加以限定
~B
下列关于成员函数的特性描述,错误的是( )。
成员函数可以重载
成员函数都是内联函数
成员函数可以设置参数的默认值
成员函数可以是公有的,也可以是私有的
~B
关于友元函数的描述,错误的是( )。
友元函数不是成员函数
友元函数只能访问私有成员
友元函数破坏隐蔽性,尽量少用
友元函数说明在体内,使用关键字friend
~B
下列关于派生的描述,错误的是( )。
派生至少应有一个基

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧