c++ 如何使用class

我是初学者,下面一段程序(有省略),我有点不太明白:1、为什么template<classT>也要用class,T在这里面不是个数据类型吗?为什么不用typename?2... 我是初学者,下面一段程序(有省略),我有点不太明白:1、为什么template<class T>也要用class,T在这里面不是个数据类型吗?为什么不用typename?2、在public里面定义函数,每次都要template<class T>吗 ?3、这个程序里面的第一个sq_LList()和第二个sq_LList(int)有什么不同?在封装好之后,我想建立一个空表,书上给的是sq_LList<double> s1(100); 这个的意思是什么?
谢谢!

//sq_LList.h
#include<iostream>
using namespace std;
template <class T>
class sq_LList
{
private:
int mm;
T*v;
public:
sq_LList(){mm=0;return;}
sq_LList(int);
void ins_sq_LList();
}
template class<T>
sq_LList<T>::sq_LList(int m)
{
mm=m;
v=new T[mm];
return;

}
}
展开
 我来答
乌浦泽65
高粉答主

推荐于2019-09-24 · 每个回答都超有意思的
知道答主
回答量:33
采纳率:0%
帮助的人:5658
展开全部

一、这是个关键字的问题,在template<>里面,class和typename完全是等价的,但鼓励使用typename,毕竟class不太准确。

二、在类定义的内部是肯定不需要再加template关键字的,除非你要定义的函数需要另一个模板参数。在类外面,肯定是要加template的。

三、这两个函数都是构造函数,不过是两个重载而已。sq_LList<double> s1(100);就是定义一个可以包含100个double类型的元素的列表

扩展资料:

以下定义了一个类模板--栈,这个栈很简单,只是为了说明类模板如何使用而已,最多只能支持100个元素入栈

//stack.cpptemplate <class  T>  Stack<T>::Stack(){

m_maxSize = 100;      

m_size = 0;

m_pT = new T[m_maxSize];

}

template <class T>  Stack<T>::~Stack() {

delete [] m_pT ;

}

template <class T> void Stack<T>::push(T t) {

m_size++;

m_pT[m_size - 1] = t;

}

template <class T> T Stack<T>::pop() {

T t = m_pT[m_size - 1];

m_size--;    return t;

}

template <class T> bool Stack<T>::isEmpty() {    return m_size == 0;

}

千锋教育
2015-12-05 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
展开全部
C++类的定义:
C++中使用关键字 class 来定义类, 其基本形式如下:
class 类名
{
public:
//公共的行为或属性

private:
//公共的行为或属性
};

类的实现:
#include <iostream>

using namespace std;

class Point
{
public:
void setPoint(int x, int y) //实现setPoint函数
{
xPos = x;
yPos = y;
}

void printPoint() //实现printPoint函数
{
cout<< "x = " << xPos << endl;
cout<< "y = " << yPos << endl;
}

private:
int xPos;
int yPos;
};

int main()
{
Point M; //用定义好的类创建一个对象 点M
M.setPoint(10, 20); //设置 M点 的x,y值
M.printPoint(); //输出 M点 的信息

return 0;
}
C++类的使用:
#include <iostream>
#include "Point.h"

using namespace std;

int main()
{
Point M; //用定义好的类创建一个对象 点M
M.setPoint(10, 20); //设置 M点 的x,y值
M.printPoint(); //输出 M点 的信息
cout<< M.xPos <<endl; //尝试通过对象M访问属性xPos

return 0;
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tattackor
2015-10-29 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:892万
展开全部


1、C++中的class是C++不同于C的关键所在;

面向对象中声明的类;
类是一组数据和对这些数据的操作(函数)的封装;
类中还可有访问的权限的控制
其中private只能由本类中的成员函数访问;
public可以由类外的成员函数访问;
protected是受保护的数据成员,在他的子类中(从此类继承产生的类)protected相当于private也就是其子类的成员函数可以访问,而其他的类中的成员函数不能访问;

2、例如:

class B;
class A
{
    B b;
public:
    void show()
    {   
            cout<<b<<endl;
    }   
};
class B
{
     int b;
     B   temp;
public:
     B(){this->b=0;}
};
int main()
{
    A a;
    a.show();
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jackwind1987
推荐于2017-10-09 · TA获得超过2738个赞
知道大有可为答主
回答量:1268
采纳率:50%
帮助的人:492万
展开全部
第一个问题:这是个关键字的问题,在template<>里面,class和typename完全是等价的,但鼓励使用typename,毕竟class不太准确。
第二个问题:什么叫在public里面?在类定义的内部是肯定不需要再加template关键字的,除非你要定义的函数需要另一个模板参数。在类外面,肯定是要加template的。
第三个问题:这两个函数都是构造函数,不过是两个重载而已。
第四个问题:这个你仔细看sq_LList<T>::sq_LList(int m)的定义,就知道了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
花花浪客
2013-11-08 · TA获得超过2069个赞
知道小有建树答主
回答量:792
采纳率:100%
帮助的人:713万
展开全部
你的第一个问题和第二个问题都是C++语法规定,没有为什么,记住就好。
第三个问题:第一个sq_LList()和第二个sq_LList(int)有什么不同,很明显,参数不同,一个没有参数,一个接受一个整数参数。这就是所谓的函数重载。
第四个问题,sq_LList<double> s1(100);就是定义一个可以包含100个double类型的元素的列表
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式